如何解决R-使用列表汇总特定列的一行 数据
我的目标是对数据框的某些列求和并将其总和输入到新列中。
假设我有以下data.frame:
df <- data.frame(names=c("a","b","c","d","e","f"),wb01=c(1,1,0),wb02=c(0,1),wb03=c(0,wb04=c(1,wb05=c(1,wb06=c(1,1))
rownames(df) <- df$names
wb01 wb02 wb03 wb04 wb05 wb06
a 1 0 0 1 1 1
b 1 0 0 1 0 1
c 0 0 1 0 1 1
d 1 0 1 1 0 1
e 1 1 1 1 0 1
f 0 1 1 1 1 1
我想通过使用一个向量来选择要累加的列,该向量将包含要累加的列的名称。 (我的实际数据帧和我将选择的列数非常大,并且不会聚集在一起,即,/我不能只选择3-5列,也不希望输入每列,因为它将超过2k。 ..)
但是回到示例,这是我要总结的列:
genelist <- c(wb02,wb03,wb06)
所以结果看起来像这样:
wb01 wb02 wb03 wb04 wb05 wb06 sum_genelist
a 1 0 0 1 1 1 1
b 1 0 0 1 0 1 1
c 0 0 1 0 1 1 2
d 1 0 1 1 0 1 3
e 1 1 1 1 0 1 3
f 0 1 1 1 1 1 3
感谢您的帮助或提示!
解决方法
我们可以使用rowSums
df$sum_genelist <- rowSums(df[intersect(genelist,names(df))],na.rm = TRUE)
df
# names wb01 wb02 wb03 wb04 wb05 wb06 sum_genelist
#a a 1 0 0 1 1 1 1
#b b 1 0 0 1 0 1 1
#c c 0 0 1 0 1 1 2
#d d 1 0 1 1 0 1 2
#e e 1 1 1 1 0 1 3
#f f 0 1 1 1 1 1 3
其中
genelist <- c('wb02','wb03','wb06')
数据
df <- structure(list(names = c("a","b","c","d","e","f"),wb01 = c(1,1,0),wb02 = c(0,1),wb03 = c(0,wb04 = c(1,wb05 = c(1,wb06 = c(1,1)),row.names = c("a",class = "data.frame")
,
您只能使用any_of
到select
数据中存在的那些列。
genelist <- c('wb02','wb06','a')
library(dplyr)
df %>% mutate(sum_genelist = rowSums(select(.,any_of(genelist))))
# names wb01 wb02 wb03 wb04 wb05 wb06 sum_genelist
#1 a 1 0 0 1 1 1 1
#2 b 1 0 0 1 0 1 1
#3 c 0 0 1 0 1 1 2
#4 d 1 0 1 1 0 1 2
#5 e 1 1 1 1 0 1 3
#6 f 0 1 1 1 1 1 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。