【问题标题】:Combine data frames from a vector of names组合来自名称向量的数据帧
【发布时间】:2015-07-17 12:47:27
【问题描述】:

我有一个我认为很容易解决的问题,但我没有设法找到解决方案。 我有大量要按行绑定的数据框。为了避免列出所有数据框的名称,我使用“paste0”快速创建数据框名称的向量。问题是我无法让 rbind 函数从这个名称向量中识别数据帧。 更明确地说:

df1 <- data.frame(x1 = sample(1:5,5), x2 =  sample(1:5,5))
df2 <- data.frame(x1 = sample(1:5,5), x2 =  sample(1:5,5))
idvec <- noquote(c(paste0("df",c(1,2))))
> [1] df1 df2

我想得到什么:

dftot <- rbind(df1,df2)
   x1 x2
1   4  1
2   5  2
3   1  3
4   3  4
5   2  5
6   5  3
7   1  4
8   2  2
9   3  5
10  4  1

dftot <- rbind(idvec)
>       [,1]  [,2] 
> idvec "df1" "df2"

【问题讨论】:

  • 我不清楚你在这里的目标是什么。是否要将特定行标记为来自特定数据帧?

标签: r dataframe rbind


【解决方案1】:

如果全局环境中有多个对象,模式为df,后跟数字,则一种选择是使用ls 来查找所有带有pattern 参数的对象。用mget 包裹它会得到list 中的值,我们可以用rbinddo.call

v1 <- ls(pattern='^df\\d+')
`row.names<-`(do.call(rbind,mget(v1)), NULL)

如果我们知道对象,另一种选择是paste 创建对象名称向量,然后像以前一样。

v1 <- paste0('df', 1:2)
 `row.names<-`(do.call(rbind,mget(v1)), NULL)

【讨论】:

  • 非常感谢。我不知道函数mget,这正是我需要的。
  • @user34771 很高兴知道它有效。感谢您的反馈。
【解决方案2】:

这应该给出结果:

dfcount <- 2
dftot <- df1 #initialise
for(n in 2:dfcount){dftot <- rbind(dftot, eval(as.name(paste0("df", as.character(n)))))}

eval(as.name(variable_name)) 从与其名称匹配的字符串中读取数据帧。

【讨论】:

  • 非常感谢,eval函数也很有用。
  • 很高兴它有帮助。我今天才发现。在此之前,如果我想通过字符串引用变量,我会让 R 编写一个脚本文件,然后获取它!
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 2023-03-13
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多