如何计算每一行给定值出现的次数?

use*_*866 3 r dataframe recode

我确信这是一个非常简单的修复,但我似乎找不到答案...我试图在数据框的末尾创建一个列,它是特定值的次数总和(例如“1”)出现在该行上。例如,如果我从以下数据框开始:

X1 <- c(5,1,7,8,1,5)
X2 <- c(5,0,0,2,3,7)
X3 <- c(6,2,3,4,1,7)
X4 <- c(1,1,5,2,1,7)

df <- data.frame(id,X1,X2,X3,X4)

  id X1 X2 X3 X4
1  1  5  5  6  1
2  2  1  0  1  1
3  3  7  0  3  5
4  4  8  2  4  2
5  5  1  3  2  1
6  6  5  7  7  7
Run Code Online (Sandbox Code Playgroud)

我试图确定值“1”在该行中出现了多少次,我希望输出如下所示:

  id X1 X2 X3 X4 one_appears
1  1  5  5  6  1           2
2  2  1  0  1  1           3
3  3  7  0  3  5           0
4  4  8  2  4  2           0
5  5  1  3  2  1           2
6  6  5  7  7  7           0
Run Code Online (Sandbox Code Playgroud)

首先十分感谢!

Hoe*_*elR 7

library(tidyverse)\n\ndf %>% \n  mutate(\n    one = rowSums(across(everything(), ~ .x == 1))\n  )\n\n# A tibble: 6 \xc3\x97 6\n     id    X1    X2    X3    X4   one\n  <int> <dbl> <dbl> <dbl> <dbl> <dbl>\n1     1     5     5     6     1     2\n2     2     1     0     2     1     2\n3     3     7     0     3     5     0\n4     4     8     2     4     2     0\n5     5     1     3     1     1     3\n6     6     5     7     7     7     0\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:

\n
df %>% \n  mutate(\n    one = rowSums(across(starts_with("X"), ~ .x == 1))\n  )\n\ndf %>% \n  mutate(\n    one = rowSums(across(X1:X4, ~ .x == 1))\n  )\n
Run Code Online (Sandbox Code Playgroud)\n


akr*_*run 5

rowSums我们可以在逻辑矩阵上使用

df$one_appears <- rowSums(df == 1, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

-输出

> df
  id X1 X2 X3 X4 one_appears
1  1  5  5  6  1           2
2  2  1  0  1  1           3
3  3  7  0  3  5           0
4  4  8  2  4  2           0
5  5  1  3  2  1           2
6  6  5  7  7  7           0
Run Code Online (Sandbox Code Playgroud)