首页 文章

dplyr :: rowwise,mutate和NA错误

提问于
浏览
5

我正在尝试将 rowwisemutate 用于可以返回NA值的函数,但是收到错误 . 考虑这个人为的例子(显然不是rowwise的情况,但说明了错误):

这有效:

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

1 回答

  • 5

    Note: 我已就此答案的结果中的错误提交了github issue #1448 .

    Update Oct 29, 2015: 看起来 rowwise() 中的这个错误已修复 . 查看上面的链接了解详细信息 .


    首先,没有理由将其作为行式操作 .

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

    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_))
    

    但是你似乎不能在行式操作中混合使用逻辑和实数/整数 .

相关问题