具有部分字符串匹配的列的总和,名称从列表中导入。环R

时间:2016-02-10 22:56:08

标签: r string names

我正在使用像这样的数据表:

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),所以我可以用它来替换{​​{1}},从而使它更容易计算吗?谢谢!

名字是这样的:

HM.MN.8

1 个答案:

答案 0 :(得分:1)

您可以尝试使用

varName <- c("H.MR2","H.MN.8")
eval(parse(text=paste0("dfa[,`",varName,"` := as.numeric(rowSums(.SD) > 1), .SDcols = grep('",varName,"', names(dfa))]")))