如何将变量传递到 split() 中?

发布于 2024-12-01 02:04:10 字数 354 浏览 0 评论 0原文

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

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

I want to run split() in a for loop, but when I pass it variable text, it just creates a new data.frame containing the text. The idea here is to split CMPD_DF_1, CMPD_DF_2, etc. based on CMPD_DF_1[5], CMPD_DF_2[5], etc. How do I pass in the data.frame and not a string?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

知足的幸福 2024-12-08 02:04:10

对于最初的困惑感到抱歉。您可以将数据框放入列表中,然后使用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)

这是一种使用 maply 执行此操作的方法,该方法允许在每个数据框中进行不同的拆分列。您只需在单独的列表中预先指定列并将它们传递给 mapply

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

Sorry for the initial confusion. You can put your data frames in a list and then use lapply. This assumes the column you are splitting on is the same in each data frame. I'll update with a more general solution...

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)

And here's a way to do this using mapply that will allow for different splitting columns in each data frame. You just pre-specify the columns in a separate list and pass them to mapply:

l <- list(d1,d2)
splitColumns <- list("y","y")
myFun2 <- function(x,col){
  return(split(x,x[,col]))
}
mapply(myFun2,l,splitColumns,SIMPLIFY = FALSE)
情绪失控 2024-12-08 02:04:10

您的代码不起作用,因为您没有将 data.frame 传递给 split。您正在传递一个字符向量,其中包含带有 data.frame 名称的字符串。像这样的东西应该可以工作,但它不太像 R。 @joran 的答案更可取。

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

Your code doesn't work because you're not passing a data.frame to split. You're passing a character vector that contains a string with the name of your data.frame. Something like this should work, but it's not very R-like. @joran's answer is preferable.

for (i in 1:10) {
  dfname <- paste("CMPD_DF", i, sep = "_")
  split(get(dfname), get(dfname)[5])
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文