我有一个数据框,想使用 dplyr 的逐行计算每行中零的数量。我做错了什么?
dt2 = data.frame(A = c(8, 6), B = c(0, 0), C = c(0, 5))
dt2
zerocount <- function(x) {sum(x == 0)}
library(dplyr)
dt2 %>% rowwise() %>% mutate(nr_of_0s = zerocount(A, B, C))
如果我将上面行中的 zerocount(A, B, C) 替换为例如 max(A, B, C),则上面的代码有效。怎么了? 谢谢!
最佳答案
我认为您的问题不在于按行。你的函数的编写方式,它需要一个对象。尝试添加一个 c():
dt2 %>% rowwise() %>% mutate(nr_of_0s = zerocount(c(A, B, C)))
请注意,如果您不致力于使用自己的函数,则可以完全按行跳过,正如 Nettle 还指出的那样。 rowSums
已经以逐行方式处理数据帧,这就是它起作用的原因:
dt2 %>% mutate(nr_of_0s = rowSums(. == 0))
关于r - dplyr - 使用 rowwise() 应用自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821137/