gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:22:20 25 4
gpt4 key购买 nike

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

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] .您还可以使用这些在某些情况下可能更安全的形式:
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 ...

关于string - 带有 R 中列列表的子集数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com