【问题标题】:dplyr::rowwise, mutate, and NA errordplyr::rowwise、mutate 和 NA 错误
【发布时间】:2016-01-10 12:00:07
【问题描述】:

我正在尝试将 rowwisemutate 与可以返回 NA 值的函数一起使用,但出现错误。考虑这个人为的例子(这显然不是按行的情况,但说明了错误):

这行得通:

library(dplyr)
data.frame(k=rnorm(10)) %>% mutate(l = ifelse(k > 0, 1, NA))

           k  l
1  -1.40223573 NA
2   1.47581873  1
3   0.35938746  1
4   0.87240448  1
5  -0.61991535 NA
6  -1.88152820 NA
7   0.25837350  1
8  -0.02250385 NA
9   0.92757943  1
10  0.49023792  1

但这会报错:

library(dplyr)
data.frame(k=rnorm(10)) %>% rowwise() %>% mutate(l = ifelse(k > 0, 1, NA))

Error: incompatible types, expecting a numeric vector

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    注意:我已经提交了github issue #1448关于此答案结果中的错误。

    2015 年 10 月 29 日更新:rowwise() 中的这个错误似乎已得到修复。详情请查看以上链接。


    首先,没有理由使它成为逐行操作。

    就错误而言,NA 属于逻辑类型。在此逐行操作中,您需要在调用ifelse() 时使用NA_real_。或者正如 Ben Bolker 在下面的 cmets 中指出的那样,您可以将 ifelse() 包装为 as.numeric()

    data.frame(k = rnorm(10)) %>% 
        rowwise() %>% 
        mutate(l = ifelse(k > 0, 1, NA_real_))
    # Source: local data frame [10 x 2]
    # Groups: <by row>
    # 
    #                k     l
    #            (dbl) (dbl)
    # 1  -1.7105691140    NA
    # 2  -0.0702667985    NA
    # 3  -0.5505724960    NA
    # 4  -0.7444839870    NA
    # 5  -0.0005646999    NA
    # 6  -0.3702584194    NA
    # 7   0.2596026787     1
    # 8   0.4149810662    NA  <-- error here pointed out by David A (see comments)
    # 9  -0.4698540654    NA
    # 10  1.0961705022     1
    

    请注意,您也可以使用整数,如

    mutate(l = ifelse(k > 0, 1L, NA_integer_))
    

    但您似乎不能在逐行操作中混合逻辑和实数/整数。

    【讨论】:

    • 更笨拙的是,as.numeric(ifelse(...)) 也可以使用
    • @BenBolker 因为它是按行排列的,所以mutate(l = if (k &gt; 0) 1 else NA_real_ ) 也可以。不过,它可能是按行排列的。
    • 谢谢,所以我猜这背后有一些哲学(可能是按行排列?)与将值放入向量时不强制转换有关?
    • @blindJesse rowwise 可能将行的结果绑定在一起,希望它们具有相同的类并拒绝强制类匹配,是的。
    • 有没有人注意到这里的结果不正确?例如第 8 行应该是 1,例如
    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2019-02-23
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多