R 在多个数据帧上循环

R 在多个数据帧上循环,r,dataframe,multiple-columns,R,Dataframe,Multiple Columns,我有4个这样结构的数据帧: 数据1: 1.8064 2.2016 2.4506 2.1828 2.1171 1.9308 2.1707 2.1885 2.2310 2.2400 1.9115 2.1527 2.0934 1.7989 2.2144 2.0091 1.9248 2.2038 1.9676 1.9224 1.9502 1.7990 2.0824 2.1300 2.0095 2.0341 1.8433 1.8361 1.9958 1.8243 2.0397 2.0482 2.1143

我有4个这样结构的数据帧:

数据1:

1.8064 2.2016 2.4506 2.1828 2.1171 1.9308 2.1707 2.1885
2.2310 2.2400 1.9115 2.1527 2.0934 1.7989 2.2144 2.0091
1.9248 2.2038 1.9676 1.9224 1.9502 1.7990 2.0824 2.1300
2.0095 2.0341 1.8433 1.8361 1.9958 1.8243 2.0397 2.0482
2.1143 2.2627 1.7620 1.7561 1.9490 1.9803 1.9336 2.2511
2.2377 2.5414 1.7867 1.6618 2.5090 1.8325 2.0212 2.1616
2.3476 2.1878 2.0469 1.7508 2.2969 1.7939 2.0291 2.0721
2.3534 2.0932 2.3502 1.9960 2.0710 1.9923 1.7787 1.9772
2.2607 2.1504 2.3685 2.1148 2.1961 1.7738 1.8405 2.0135
2.2411 1.9916 2.4726 2.0347 2.0751 1.7570 1.8874 1.9385
数据2:

2.1913 1.8981 2.2441 2.3068 2.1198 2.1484 1.8056 1.7747
2.0842 1.8750 2.3023 2.1204 1.8972 2.1534 1.8028 1.9401
2.2105 1.9618 2.2472 1.9656 2.3098 1.9771 1.9520 1.8627
2.2863 1.9959 2.1781 1.9544 1.9281 1.9286 1.9699 2.0330
2.1987 2.0583 2.0953 2.0206 2.1148 2.3789 1.7052 1.9145
2.0513 2.0850 1.9810 2.4943 1.9120 2.2209 1.9461 2.0882
2.0049 2.0416 1.9303 2.3681 1.8974 2.0054 1.9261 1.9097
1.6882 2.1196 1.8641 2.3600 2.0931 1.7641 2.1131 1.7748
1.8840 1.7604 1.7664 2.2000 2.0055 1.8229 1.9871 1.9168
1.7340 1.9656 1.8480 2.0523 1.9950 1.8716 1.9206 1.7786
1.9604 1.9804 1.9601 2.0599 1.8969 1.8087 2.1845 1.8598
数据3:

1.8064 2.2016 2.4506 2.1828 2.1171 1.9308 2.1707 2.1885
2.2310 2.2400 1.9115 2.1527 2.0934 1.7989 2.2144 2.0091
1.9248 2.2038 1.9676 1.9224 1.9502 1.7990 2.0824 2.1300
2.0095 2.0341 1.8433 1.8361 1.9958 1.8243 2.0397 2.0482
2.1143 2.2627 1.7620 1.7561 1.9490 1.9803 1.9336 2.2511
2.2377 2.5414 1.7867 1.6618 2.5090 1.8325 2.0212 2.1616
2.3476 2.1878 2.0469 1.7508 2.2969 1.7939 2.0291 2.0721
2.3534 2.0932 2.3502 1.9960 2.0710 1.9923 1.7787 1.9772
2.2607 2.1504 2.3685 2.1148 2.1961 1.7738 1.8405 2.0135
2.2411 1.9916 2.4726 2.0347 2.0751 1.7570 1.8874 1.9385
数据4:

2.1913 1.8981 2.2441 2.3068 2.1198 2.1484 1.8056 1.7747
2.0842 1.8750 2.3023 2.1204 1.8972 2.1534 1.8028 1.9401
2.2105 1.9618 2.2472 1.9656 2.3098 1.9771 1.9520 1.8627
2.2863 1.9959 2.1781 1.9544 1.9281 1.9286 1.9699 2.0330
2.1987 2.0583 2.0953 2.0206 2.1148 2.3789 1.7052 1.9145
2.0513 2.0850 1.9810 2.4943 1.9120 2.2209 1.9461 2.0882
2.0049 2.0416 1.9303 2.3681 1.8974 2.0054 1.9261 1.9097
1.6882 2.1196 1.8641 2.3600 2.0931 1.7641 2.1131 1.7748
1.8840 1.7604 1.7664 2.2000 2.0055 1.8229 1.9871 1.9168
1.7340 1.9656 1.8480 2.0523 1.9950 1.8716 1.9206 1.7786
1.9604 1.9804 1.9601 2.0599 1.8969 1.8087 2.1845 1.8598
我需要从data1获取列1,从data2获取列1,从data3获取列1,从data4获取列1,并将它们并排组合到单个数据帧中,并对其他列执行相同的操作

我用的是这个方法,但有点初级

dat1 <- data.frame(data1$V1)
dat2 <- data.frame(data2$V1)
dat3 <- data.frame(data3$V1)
dat4 <- data.frame(data4$V1)

final_data1 <- cbind(dat1,dat2,dat3,dat4)
. 
.
.


dat1 <- data.frame(data1$V8)
dat2 <- data.frame(data2$V8)
dat3 <- data.frame(data3$V8)
dat4 <- data.frame(data4$V8)

final_data8 <- cbind(dat1,dat2,dat3,dat4)

dat1我们可以将所有数据放在一个
列表中
,提取第一列并
cbind
将其放在一起

do.call(cbind, lapply(mget(paste0("data", 1:4)), `[`, 1))
最好将它保存在一个数据集中,并使用一个id col来引用它来自哪个数据集

library(data.table)
dt <- rbindlist(mget(paste0("data", 1:4)), idcol = TRUE)
或者使用
geom\u直方图
facet\u wrap
(用于每列的单独绘图)

您可以使用
eval(parse())
构造:

df1 = data.frame(V1 = 1:10)
df2 = data.frame(V1 = 1:10)
df3 = data.frame(V1 = 1:10)
df4 = data.frame(V1 = 1:10)

final = matrix(NA, nrow = nrow(df1), ncol = 4)

for (i in 1:4) {
  final[, i] = eval(parse(text = paste0('df', i, '$V1')))
}
另一种方法是将所有dfs放在一个列表中并使用Lappy:

dfList = list(df1, df2, df3, df4)
do.call(cbind, lapply(dfList, `[[`, 'V1'))

上面,
lappy
在所有数据帧上循环并返回一个列表,其中每个元素都是第一列。部分
do.call(cbind,…)
然后将所有这些元素绑定到一个矩阵中。

我们可以循环遍历列,绑定它们,并将生成的8个数据帧保存在一个列表中:

res <- lapply(1:8, function(i){ cbind(data1[i], data2[i], data3[i], data4[i]) })

res是的,这是可行的,但是我如何提取从该列表中创建的8数据帧呢?我会用它们制作柱状图。@Enrique
res[[1]]
应该给你第一个data.frame。另一个问题。如果我想加入四个数据帧,但每一个都有不同的大小。我怎样才能用你的方法加入他们?我的意思是,例如:dat1有100个对象,dat2有50个对象等等…@Enrique用于C绑定不相等的数据帧。
df1 = data.frame(V1 = 1:10)
df2 = data.frame(V1 = 1:10)
df3 = data.frame(V1 = 1:10)
df4 = data.frame(V1 = 1:10)

final = matrix(NA, nrow = nrow(df1), ncol = 4)

for (i in 1:4) {
  final[, i] = eval(parse(text = paste0('df', i, '$V1')))
}
dfList = list(df1, df2, df3, df4)
do.call(cbind, lapply(dfList, `[[`, 'V1'))
res <- lapply(1:8, function(i){ cbind(data1[i], data2[i], data3[i], data4[i]) })