[英]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.