如何将变量传递给split()?

时间:2011-08-23 19:59:16

标签: r split

我想在for循环中运行split(),但是当我传递变量文本时,它只会创建一个包含文本的新data.frame。这里的想法是基于CMPD_DF_1CMPD_DF_2等分割CMPD_DF_1[5]CMPD_DF_2[5]等。如何传入data.frame而不是字符串?

for (i in 1:10) {
  split(paste("CMPD_DF", i, sep = "_"), 
        paste(paste("CMPD_DF", i, sep = "_"), "[5]", sep=""))
}

2 个答案:

答案 0 :(得分:2)

抱歉最初的困惑。您可以将数据框放在列表中,然后使用lapply。这假定您要拆分的列在每个数据框中是相同的。我会用更通用的解决方案进行更新......

d1 <- data.frame(x =1:10, y = rep(letters[1:2], each = 5))
d2  <-  d1

l <- list(d1,d2)
myFun <- function(x){
  return(split(x,x[,2]))
}
lapply(l,myFun)

以下是使用mapply执行此操作的方法,该方法允许在每个数据框中使用不同的拆分列。您只需在单独的列表中预先指定列,然后将其传递给mapply

l <- list(d1,d2)
splitColumns <- list("y","y")
myFun2 <- function(x,col){
  return(split(x,x[,col]))
}
mapply(myFun2,l,splitColumns,SIMPLIFY = FALSE)

答案 1 :(得分:0)

您的代码无效,因为您没有将data.frame传递给split。您传递的是包含带有data.frame名称的字符串的字符向量。像这样的东西应该有用,但它不是很像R。 @joran的答案更可取。

for (i in 1:10) {
  dfname <- paste("CMPD_DF", i, sep = "_")
  split(get(dfname), get(dfname)[5])
}