【发布时间】:2018-11-21 13:43:03
【问题描述】:
我有一个数据集,我想计算一个值(大于 0)出现在一系列列中的 次 次数,以 x_times 表示。
例子:
. x1 x2 x3 x4 x_times
1 NA 0 0 0 0
2 0 NA 0 0 0
3 0 0 NA 1 1
4 1 0 1 NA 2
5 NA 0 0 0 0
6 0 NA 0 0 0
7 0 0 NA 0 0
8 1 2 4 NA 3
9 NA 0 0 0 0
10 0 NA 1 5 2
11 0 0 NA 0 0
12 0 1 0 NA 1
我摆弄了 ifelse 语句,但 4 列有点过分。我可以,但必须有一个更简单的方法。
count <- 0
with(df5, ifelse(df$x1 > 0, count+1, ifelse(df$x1 == 0 , count+0 ,
ifelse(df$x2 > 0, count+1, ifelse(df$x2 == 0, count+0,
ifelse(df$x3 > 0, count+1, ifelse(df$x3 == 0, count+0,
ifelse(df$x4 > 0, count+1, ifelse(df$x4 == 0, count+0, 0
)))))))))
附带问题,我可以在这样的 ifelse 语句中 +1 吗?这几行 ifelse 代码不起作用,它会更改值而不是添加它们。
我尝试修改这个:apply(cbind(df$x1, df$x2, df$x3,df$x4), 1, function(x) ifelse(all(is.na(x)), NA, nrow(x, na.rm=T))),但无济于事。
dplyr::count() 返回有关整数的错误
rowSums 将这些值相加,x > 0 时我只想 +1。
我觉得这是一个简单的问题,但我无法以简洁的方式弄清楚。对于较大的数据集,带有循环的答案将受到赞赏,但它本身不一定是函数/for循环。
【问题讨论】:
-
试试
rowSums(df > 0, na.rm = TRUE) -
我需要从列的子集中调用它们。
rowSums(cbind(df$x1 , df$x2 , df$x3 , df5x4) > 0, na.rm = T )就像一个魅力。谢谢
标签: r multiple-columns