r - dplyr::rowwise、变异和 NA 错误

标签 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

但这会产生错误:

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

Error: incompatible types, expecting a numeric vector

最佳答案

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

2015 年 10 月 29 日更新: 看来 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_))

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

关于r - dplyr::rowwise、变异和 NA 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090745/

相关文章:

r - 如何在不删除 R 中存在 NA 的行的情况下执行聚类

r - dplyr:汇总data.frame以获得最高值和最低值

滚动总结以另一个数据帧上的多个变量为条件

r - 根据字符串中多个单词的精确匹配转换新列

r - Dplyr Mutate_each 用于成对的列集

r - 有没有办法使用 dplyr 根据除以另一列的 group_by 来创建新列?

R:读取 .csv 文件会删除前导零

c++ - 让 gperftools 与 Rcpp 一起工作

r - 如何根据一天中的时间从一个数据帧中派生出 2 个数据帧?

r - 如何按组创建计数器/计数?