我想在for循环中运行split()
,但是当我传递变量文本时,它只会创建一个包含文本的新data.frame。这里的想法是基于CMPD_DF_1
,CMPD_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=""))
}
答案 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])
}