通过动态列名设置数据表

马克C

我正在尝试使用动态列名对表进行子集化,但是无法使以下语句起作用

mm2myModuleByYear[grep(i,colnames(mm2myModuleByYear),value=TRUE)==mId,authId]

使用下面的示例数据

i<-1997
mId<-37

mm2myModuleByYear<-structure(list(authId = c(220, 2269, 2270, 2271, 2991, 2992), 
        module1994 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_), module1995 = c(NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_, NA_integer_), module1996 = c(NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
        ), module1997 = c(1428L, 669L, 37L, NA, NA, NA), module1998 = c(1428L, 
        669L, 37L, NA, 832L, 832L), module1999 = c(1428L, 669L, 37L, 
        NA, 832L, 832L), module2000 = c(31L, 136L, 8L, NA, 1046L, 
        1046L), module2001 = c(31L, 136L, 8L, NA, 1046L, 1046L), 
        module2002 = c(31L, 136L, 8L, NA, 1046L, 1046L), module2003 = c(31L, 
        136L, 8L, 2314L, 1046L, 1046L), module2004 = c(955L, 320L, 
        10L, 1791L, 1361L, 1361L), module2005 = c(955L, 320L, 10L, 
        1791L, 1361L, 1361L), module2006 = c(955L, 320L, 10L, 1791L, 
        1361L, 1361L), module2007 = c(955L, 320L, 10L, 1791L, 1361L, 
        1361L), module2008 = c(955L, 320L, 10L, 1791L, 1361L, 1361L
        ), module2009 = c(16L, 374L, 11L, 1960L, 1544L, 1544L), module2010 = c(16L, 
        374L, 11L, 1960L, 1544L, 1544L), module2011 = c(16L, 374L, 
        11L, 1960L, 1544L, 1544L), module2012 = c(16L, 374L, 11L, 
        1960L, 1544L, 1544L), module2013 = c(16L, 374L, 11L, 1960L, 
        1544L, 1544L)), .Names = c("authId", "module1994", "module1995", 
    "module1996", "module1997", "module1998", "module1999", "module2000", 
    "module2001", "module2002", "module2003", "module2004", "module2005", 
    "module2006", "module2007", "module2008", "module2009", "module2010", 
    "module2011", "module2012", "module2013"), sorted = "module1996", class = c("data.table", 
    "data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x2697d88>)

但是,如果我做类似的事情,例如

mm2myModuleByYear[module1997==mId,grep(i,colnames(mm2myModuleByYear)),with=FALSE]

这有效。我做错了什么吗?如何有条件地设置数据表中的子集列?

阿伦

让我们看看您在中的表达i

grep(i,colnames(mm2myModuleByYear),value=TRUE)
[1] "module1997" 

因此表达式:

grep(i,colnames(mm2myModuleByYear),value=TRUE)==mId
# [1] FALSE

将返回FALSE(当然是“ module1997”!= 37)。您打算在这里获取grep()表达式返回的列为此,您可以get()从基数R开始使用

with(mm2myModuleByYear, get(grep(i,colnames(mm2myModuleByYear),value=TRUE)))
# [1] 1428  669   37   NA   NA   NA

简而言之,您get()在i表达式中缺少a

mm2myModuleByYear[get(grep(i,colnames(mm2myModuleByYear),value=TRUE))==mId, authId]
# [1] 2270

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章