我想将总乘积小于5的样本中的值更改为零,而其他保持不变。
我已经尝试过:
dat %>%
group_by(snpID) %>%
mutate_at(vars(2:6),
list(~ifelse(sum(.) < 5, 0, .)))
结果 :(两行的总和替换每行)
dat %>%
group_by(snpID) %>%
mutate_at(vars(2:6),
list(~ifelse(sum(.) < 5, 0, ungroup(.))))
错误:
UseMethod(“ ungroup”)中的错误: 没有适用于“ ungroup”的适用方法应用于类“ c('integer','numeric')”的对象
原始
:snpID f1 f2 f3 m1 m2 m3
A_001 2 5 2 0 1 3
A_001 0 3 8 2 5 10
A_002 11 5 12 7 0 2
A_002 2 6 5 14 5 3
我想要的:
snpID f1 f2 f3 m1 m2 m3
A_001 0 5 2 0 1 3
A_001 0 3 8 0 5 10
A_002 11 5 12 7 0 2
A_002 2 6 5 14 5 3
A_001
和f1
中m1
的总和小于5,因此两行都返回零值。
任何帮助将不胜感激。
答案 0 :(得分:0)
根据您的数据集示例,您需要按loci
而不是snpID
进行分组。
您编写的ifelse()
应该可以工作。这是一种应该也可以使用的替代方法:
dat %>% group_by(loci) %>% mutate_at(vars(-loci), list(~replace(., sum(.) < 5, 0)))