我试图使用rowwise并mutate具有能够返回一个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)
注意:我已经提交了关于此答案结果中的错误的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)
但是你似乎不能在行式操作中混合使用逻辑和实数/整数.