我有多个变量按前缀(par___、fri___、gp___ 等)分组在一起,其中有 29 个组。
每个变量的值为 0 或 1。我需要做的是对这些组(即,partner___1 + Partner___2 等)求和,如果 rowSums = 0,则使每个变量为 NA。
例如。我的数据如下所示:
par___ |
par___2 |
fri___1 |
fri___2 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
我希望它看起来像这样:
par___ |
par___2 |
fri___1 |
fri___2 |
NA |
NA |
1 |
1 |
0 |
1 |
NA |
NA |
NA |
NA |
1 |
0 |
NA |
NA |
NA |
NA |
我可以像这样单独完成:
df<- df%>%
mutate(rowsum = rowSums(.[grep("par___", names(.))])) %>%
mutate_at(grep("par___", names(.)), funs(ifelse(rowsum == 0, NA, .))) %>%
select(-rowsum)
我想我可以做这样的事情:
vars <- c('par___', "fri___','gp___')
for (i in vars) {
df<- df%>%
# creates a "rowsum" column storing the sum of columns 1:2
mutate(rowsum = rowSums(.[grep(i, names(.))])) %>%
# applies, to columns 1:2, a function that puts NA when the sum of the rows is 0
mutate_at(grep(i, names(.)), funs(ifelse(rowsum == 0, NA, .))) %>%
select(-rowsum)
}
没有错误消息,但它不起作用。
另外,我尝试使用 mutate(across()) 而不是 mutate_at() 并收到此错误:
错误:有问题mutate()
input ..1
。
x 无法将列表转换为函数
我输入..1
is across(grep(i, names(.)), list(ifelse(rowsum == 0, NA, .)))
.
而且,我尝试使用 list 而不是 funs 并收到此错误:
rowsum == 0 中的错误:
比较 (1) 仅适用于原子类型和列表类型
任何帮助将不胜感激!
谢谢大家。