我正在尝试计算 dat 框架中行中非零元素的计数,但不起作用。
条件:在计算行中非零元素的计数时只想排除一列
我只想选择 T_1_1,T_1_2,T_1_3.....并排除 T_1_0 并创建一个新列并检查行中有多少非零元素可用。我在这里做什么..??
df <- data.frame("T_1_1"= c(68,24,0,105,58,0,135,126,24),
"T_1_2"=c(26,105,0,73,39,97,46,108,0),
"T_1_3"=c(93,32,73,103,149,0,147,113,139),
"S_2_1"=c(69,67,94,0,77,136,137,92,73),
"S_2_2"=c(87,67,47,120,85,122,0,96,79),
"S_2_3"= c(150,0,132,121,29,78,109,40,0),
"T_1_0"= c(79,0,0,115,98,12,15,121,2)
)
df <- df %>% select(matches("^T_1_1"),-"T_1_0") %>% mutate(new1 = rowSums(matches("^T_1_1")!=0))
答案 0 :(得分:1)
您可以使用正则表达式 'T_1_[1-9]'
来排除 T_1_0
。
library(dplyr)
df <- df %>% mutate(new1 = rowSums(select(., matches('T_1_[1-9]')) !=0))
df
# T_1_1 T_1_2 T_1_3 S_2_1 S_2_2 S_2_3 T_1_0 new1
#1 68 26 93 69 87 150 79 3
#2 24 105 32 67 67 0 0 3
#3 0 0 73 94 47 132 0 1
#4 105 73 103 0 120 121 115 3
#5 58 39 149 77 85 29 98 3
#6 0 97 0 136 122 78 12 1
#7 135 46 147 137 0 109 15 3
#8 126 108 113 92 96 40 121 3
#9 24 0 139 73 79 0 2 2
或更具体:
df <- df %>% mutate(new1 = rowSums(select(., starts_with('T_1'), -T_1_0) !=0))
答案 1 :(得分:1)
这也可以解决您的问题:
library(purrr)
df %>%
mutate(exclu_T_1_0 = pmap(df %>% select(starts_with("T_1") & !ends_with("0")),
~ sum(c(...) != 0)))
T_1_1 T_1_2 T_1_3 S_2_1 S_2_2 S_2_3 T_1_0 exclu_T_1_0
1 68 26 93 69 87 150 79 3
2 24 105 32 67 67 0 0 3
3 0 0 73 94 47 132 0 1
4 105 73 103 0 120 121 115 3
5 58 39 149 77 85 29 98 3
6 0 97 0 136 122 78 12 1
7 135 46 147 137 0 109 15 3
8 126 108 113 92 96 40 121 3
9 24 0 139 73 79 0 2 2