dplyr :: rowwise,mutate和NA错误

bli*_*sse 5 r dplyr

我试图使用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
Run Code Online (Sandbox Code Playgroud)

但是这给出了一个错误:

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

Error: incompatible types, expecting a numeric vector
Run Code Online (Sandbox Code Playgroud)

Ric*_*ven 5

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

更新2015年10月29日:看起来这个错误rowwise()已修复.查看上面的链接了解详细信息.


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

就错误而言,NA是逻辑类型.您将需要在此NA_real_调用ifelse()中使用此行操作.或者正如Ben Bolker在下面的评论中指出的那样,你可以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
Run Code Online (Sandbox Code Playgroud)

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

mutate(l = ifelse(k > 0, 1L, NA_integer_))
Run Code Online (Sandbox Code Playgroud)

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

  • 有没有人注意到这里的结果不正确?例如,第8行应为1 (7认同)
  • 我提交了[问题#1448](https://github.com/hadley/dplyr/issues/1448). (3认同)