组合来自名称向量的数据帧
Combine data frames from a vector of names
我有一个我认为很容易解决的问题,但我没有设法找到解决方案。
我有大量要按行绑定的数据框。为了避免列出所有数据框的名称,我使用 "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"
如果全局环境中有多个对象具有 df
后跟数字的模式,一种选择是使用 ls
查找所有具有 pattern
参数的对象。用 mget
包装它得到 list
中的值,我们可以用 do.call
.
rbind
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)
这应该给出结果:
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))
从与其名称匹配的字符串中读取数据帧。
我有一个我认为很容易解决的问题,但我没有设法找到解决方案。 我有大量要按行绑定的数据框。为了避免列出所有数据框的名称,我使用 "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"
如果全局环境中有多个对象具有 df
后跟数字的模式,一种选择是使用 ls
查找所有具有 pattern
参数的对象。用 mget
包装它得到 list
中的值,我们可以用 do.call
.
rbind
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)
这应该给出结果:
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))
从与其名称匹配的字符串中读取数据帧。