当数据帧中的行数可能不同时,数据帧的并行 cbind
parallel cbind of data frames when number of rows in data frames could differ
考虑以下示例-
a1<-data.frame(a=c(1,2,3),b=c(4,5,6))
a2<-data.frame(a=c(5,6),b=c(7,8))
a3<-data.frame(e=c(34,26),f=c(41,65))
a4<-data.frame(e=c(13,25,567),f=c(14,57,56))
我想在删除 a1 的最后一行后将 a1 绑定到 a3,在删除 a4 的最后一行后将 a2 绑定到 a4 以生成
a b e f
1 1 4 34 41
2 2 5 26 65
和
a b e f
1 5 7 13 14
2 6 8 25 57
Map(cbind, list(a1,a2),list(a3,a4))
正如其他地方所建议的那样,仅当所有数据框都具有相同的行数时才有效。在 cbind 中的任何组成数据帧中删除额外行后如何进行 cbind?
我们可以使用 mget
将列表中的所有数据帧分成两半。在 Map
中使用它们,从数据框中获取最小行数,对这些行进行子集化,然后 cbind
。
list_dfs <- mget(paste0('a', 1:4))
Map(function(x, y) {
rows = seq_len(min(nrow(x), nrow(y)))
cbind(x[rows, ], y[rows, ])
},list_dfs[1:(length(list_dfs)/2)],
list_dfs[(length(list_dfs)/2 + 1):length(list_dfs)])
#$a1
# a b e f
#1 1 4 34 41
#2 2 5 26 65
#$a2
# a b e f
#1 5 7 13 14
#2 6 8 25 57
您可以使用 nrow
到 access/exclude 最后一行。
Map(cbind, list(a1[-nrow(a1), ], a2), list(a3, a4[-nrow(a4), ]))
# [[1]]
# a b e f
# 1 1 4 34 41
# 2 2 5 26 65
#
# [[2]]
# a b e f
# 1 5 7 13 14
# 2 6 8 25 57
考虑以下示例-
a1<-data.frame(a=c(1,2,3),b=c(4,5,6))
a2<-data.frame(a=c(5,6),b=c(7,8))
a3<-data.frame(e=c(34,26),f=c(41,65))
a4<-data.frame(e=c(13,25,567),f=c(14,57,56))
我想在删除 a1 的最后一行后将 a1 绑定到 a3,在删除 a4 的最后一行后将 a2 绑定到 a4 以生成
a b e f
1 1 4 34 41
2 2 5 26 65
和
a b e f
1 5 7 13 14
2 6 8 25 57
Map(cbind, list(a1,a2),list(a3,a4))
正如其他地方所建议的那样,仅当所有数据框都具有相同的行数时才有效。在 cbind 中的任何组成数据帧中删除额外行后如何进行 cbind?
我们可以使用 mget
将列表中的所有数据帧分成两半。在 Map
中使用它们,从数据框中获取最小行数,对这些行进行子集化,然后 cbind
。
list_dfs <- mget(paste0('a', 1:4))
Map(function(x, y) {
rows = seq_len(min(nrow(x), nrow(y)))
cbind(x[rows, ], y[rows, ])
},list_dfs[1:(length(list_dfs)/2)],
list_dfs[(length(list_dfs)/2 + 1):length(list_dfs)])
#$a1
# a b e f
#1 1 4 34 41
#2 2 5 26 65
#$a2
# a b e f
#1 5 7 13 14
#2 6 8 25 57
您可以使用 nrow
到 access/exclude 最后一行。
Map(cbind, list(a1[-nrow(a1), ], a2), list(a3, a4[-nrow(a4), ]))
# [[1]]
# a b e f
# 1 1 4 34 41
# 2 2 5 26 65
#
# [[2]]
# a b e f
# 1 5 7 13 14
# 2 6 8 25 57