如果R中的任何列中有任何实例,则按行计数

时间:2019-04-01 16:37:54

标签: r count row

我有一个像这样的数据框: df

ID  Black  red   blue  green
1     0      1     1     1
2     0      0     2     1
3     0      5     1     2
4     0      0     1     2
5     0      0     1     2

使用此数据,如何计算具有任何数字的列而不管实际的数字是多少?有什么办法吗?

我尝试了rowSums(df),但结果不是我想要的。

我想要的输出是:

ID  Black  red   blue  green    count
1     0      1     1     1        3
2     0      0     2     1        2
3     0      5     1     2        3
4     0      0     1     2        2
5     0      0     1     2        2

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我认为这应该对您有用

for (int a = 0; a < ls.size(); a++)
{
  // Get first element
  String firstE = ls.get(a);

  // Get corresponding vl elements
  List<String> vls = vl.get(a);

  // Now print the elements
  // The first element of vl should be preceeded by the corresponding element in ls
  // The others by the predecessor in the same array
  for (int b = 0; b < vls.size(); b++)
  {
    System.out.print("[");
    if (b == 0)
      System.out.print(firstE);
    else
      System.out.print(vls.get(b - 1));
    System.out.println(", " + vls.get(b) + "]");
  }

}

答案 1 :(得分:1)

另一种解决方案:

library(dplyr)

data <-
  data.frame(Black = rep(0, 5),
             Red = c(1,0,5,0,0),
             Blue = c(1,2,1,1,1),
             Green = c(1,1,2,2,2)
             )
data$count <-
  data %>%
  apply(2, as.logical) %>%
  rowSums

这产生的结果与ccharles的回答相同,但是利用了我认为广泛有用的技巧。通过将所有值强制转换为逻辑类(即TRUEFALSE),可以将所有零折叠为FALSE,将其他任何数字折叠为TRUE。数值函数将逻辑值视为TRUE = 1FALSE = 0,因此您可以使用rowSums()获取每一行的计数。