部分字符串匹配的列总和,名称从列表中导入。 R
Sum of columns with partial string match, with names imported from a list. R
我正在像这样处理数据表:
ID <- c("ChrM","ChrM","ChrM","ChrM","ChrM")
pos <- c(5,6,7,10,11)
cr.H.MN.8A <- c(0,0,3,0,1)
cr.H.MN.8B <- c(2,1,0,1,0)
cr.H.MR.8A<-c(0,0,0,0,1)
cr.H.MR.8B<-c(0,2,0,0,1)
cr.H.MR2.8A<-c(0,1,1,0,0)
cr.H.MR2.8B<-c(0,1,0,0,0)
dfa <- data.table(ID,pos,cr.H.MN.8A,cr.H.MN.8B,cr.H.MR.8A,cr.H.MR.8B,cr.H.MR2.8A,cr.H.MR2.8B)
dfa
ID pos cr.H.MN.8A cr.H.MN.8B cr.H.MR.8A cr.H.MR.8B cr.H.MR2.8A cr.H.MR2.8B
1: ChrM 5 0 2 0 0 0 0
2: ChrM 6 0 1 0 2 1 1
3: ChrM 7 3 0 0 0 1 0
4: ChrM 10 0 1 0 0 0 0
5: ChrM 11 1 0 1 1 0 0
>
现在,在之前的一个问题中,我询问了如何使用名称字符串上的相似性将它们相加
dfa[,`H.MN.8` := as.numeric(rowSums(.SD) > 1), .SDcols = grep("cr.H.MN.8", names(dfa))]
完美无缺。但是我有另一个问题;是否可以自动分配分隔字符串所需的参数?我已经得到了列表中每一列的名称(它们以前是不同的 data.frames),所以我可以用它来代替 HM.MN.8
从而使它更容易计算吗?谢谢!
名字是这样的:
names(dfb)<-c("cr.H.MN.8A","cr.H.MN.8B","cr.H.MR.8A","cr.H.MR.8B","cr.H.MR2.8A","cr.H.MR2.8B")
您可以尝试使用
varName <- c("H.MR2","H.MN.8")
eval(parse(text=paste0("dfa[,`",varName,"` := as.numeric(rowSums(.SD) > 1), .SDcols = grep('",varName,"', names(dfa))]")))
我正在像这样处理数据表:
ID <- c("ChrM","ChrM","ChrM","ChrM","ChrM")
pos <- c(5,6,7,10,11)
cr.H.MN.8A <- c(0,0,3,0,1)
cr.H.MN.8B <- c(2,1,0,1,0)
cr.H.MR.8A<-c(0,0,0,0,1)
cr.H.MR.8B<-c(0,2,0,0,1)
cr.H.MR2.8A<-c(0,1,1,0,0)
cr.H.MR2.8B<-c(0,1,0,0,0)
dfa <- data.table(ID,pos,cr.H.MN.8A,cr.H.MN.8B,cr.H.MR.8A,cr.H.MR.8B,cr.H.MR2.8A,cr.H.MR2.8B)
dfa
ID pos cr.H.MN.8A cr.H.MN.8B cr.H.MR.8A cr.H.MR.8B cr.H.MR2.8A cr.H.MR2.8B
1: ChrM 5 0 2 0 0 0 0
2: ChrM 6 0 1 0 2 1 1
3: ChrM 7 3 0 0 0 1 0
4: ChrM 10 0 1 0 0 0 0
5: ChrM 11 1 0 1 1 0 0
>
现在,在之前的一个问题中,我询问了如何使用名称字符串上的相似性将它们相加
dfa[,`H.MN.8` := as.numeric(rowSums(.SD) > 1), .SDcols = grep("cr.H.MN.8", names(dfa))]
完美无缺。但是我有另一个问题;是否可以自动分配分隔字符串所需的参数?我已经得到了列表中每一列的名称(它们以前是不同的 data.frames),所以我可以用它来代替 HM.MN.8
从而使它更容易计算吗?谢谢!
名字是这样的:
names(dfb)<-c("cr.H.MN.8A","cr.H.MN.8B","cr.H.MR.8A","cr.H.MR.8B","cr.H.MR2.8A","cr.H.MR2.8B")
您可以尝试使用
varName <- c("H.MR2","H.MN.8")
eval(parse(text=paste0("dfa[,`",varName,"` := as.numeric(rowSums(.SD) > 1), .SDcols = grep('",varName,"', names(dfa))]")))