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)
首先十分感谢!
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\nRun Code Online (Sandbox Code Playgroud)\n编辑:
\ndf %>% \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 )\nRun Code Online (Sandbox Code Playgroud)\n
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)
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |