繁体   English   中英

带有 R 中列列表的子集数据框

[英]Subset dataframe with list of columns in R

我想选择存储在字符串变量中的数据框中的所有列。 例如:

v1 <- rnorm(100)
v2 <- rnorm(100)
v3 <- rnorm(100)
df <- data.frame(v1,v2,v3)

我想完成以下任务:

df[,c('v1','v2')]

但我想使用一个变量而不是 (c('v1', 'v2'))(这些都失败了):

select.me <- "'v1','v2'"
df[,select.me]
df[,c(select.me)]
df[,c(paste(select.me,sep=''))]

感谢您帮助解决一个简单的问题,

这里的讽刺是,当你说“我想这样做”时,第一个表达应该成功,

df[,c('v1','v2')]
> str( df[,c('v1','v2')] )
'data.frame':   100 obs. of  2 variables:
 $ v1: num  -0.3347 0.2113 0.9775 -0.0151 -1.8544 ...
 $ v2: num  -1.396 -0.95 -1.254 0.822 0.141 ...

而所有后来的尝试都会失败。 我后来意识到你不知道你可以使用select.me <- c('v1','v2') ; df[ , select.me] select.me <- c('v1','v2') ; df[ , select.me] 您也可以使用这些在某些情况下可能更安全的表单:

df[ , names(df) %in% select.me] # logical indexing
df[ , grep(select.me, names(df) ) ]  # numeric indexing
df[ , grepl(select.me, names(df) ) ]  # logical indexing

其中任何一个都可以用于否定( !logical )或减号( -numeric )来检索补码,而不能使用带有否定的字符索引。 如果您希望在可理解性方面达到一个级别,并且愿意将select.me值更改为有效的R表达式,则可以执行以下操作:

select.me <- "c('v1','v2')"
df[ , eval(parse(text=select.me)) ]

不是我推荐这个...只是为了让你知道在你“学会走路”之后这种可能性。 也可能(虽然相当巴洛克式)使用您的原始引用字符串来提取信息(尽管我认为这只能说明为什么您的第一个版本更优秀):

select.me <- "'v1','v2'"
df [ , scan(textConnection(select.me), what="", sep=",") ]
> str( df [ , scan(textConnection(select.me), what="", sep=",") ] )
Read 2 items
'data.frame':   100 obs. of  2 variables:
 $ v1: num  -0.3347 0.2113 0.9775 -0.0151 -1.8544 ...
 $ v2: num  -1.396 -0.95 -1.254 0.822 0.141 ...

这是基本的R sytnax,也许您需要阅读介绍性手册

select.me <- c('v1','v2')
df[,select.me]

你是说这个吗?

dat <- cbind(df$v1, df$v2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM