每个两列合并两个data.frame

时间:2019-06-16 15:09:36

标签: r

我有一个要重新排序的巨大data.frame。想法是将其分成两半(因为前半部分包含与后半部分不同的信息),并创建第三个数据帧,该数据帧将两者结合在一起。由于我总是需要第一个数据帧的前两列,然后是第二个数据帧的前两列,因此我需要帮助。

new1<-all_cont_video_algo[,1:826]
new2<-all_cont_video_algo[,827:length(all_cont_video_algo)]
df3<-data.frame()

新数据框应如下所示:

new3 [new1 [1],new1 [2],new2 [1],new2 [2],new1 [3],new1 [4],new2 [3],new2 [4],new1 [5], new1 [6],new2 [5],new2 [6]等。

伪算法,将数据帧new1的2列绑定,然后将数据帧new2的2列绑定,等等。

我现在尝试了以下操作(感谢Akrun):

new1<-all_cont_video_algo[,1:826]
new2<-all_cont_video_algo[,827:length(all_cont_video_algo)]

new1<-as.data.frame(new1, stringsAsFactors =FALSE)
new2<-as.data.frame(new2, stringsAsFactors =FALSE)

df3<-data.frame()
f1 <- function(Ncol, n) {
as.integer(gl(Ncol, n, Ncol))
}  
lst1 <- split.default(new1, f1(ncol(new1), 2))
lst2 <- split.default(new2, f1(ncol(new2), 2))

lst3 <- Map(function(x, y) df3[unlist(cbind(x, y))], lst1, lst2)

但是,给我一个“未定义列选择错误”。

2 个答案:

答案 0 :(得分:0)

没有可重复的例子尚不清楚。根据描述,我们可以split将数据集的列放入list的数据集中,并使用Mapcbind相应的数据集的列unlist并使用订购第三个数据集

1)创建一个函数以返回用于拆分数据集的分组列

f1 <- function(Ncol, n) {
 as.integer(gl(Ncol, n, Ncol))
  } 

2)将数据集分成一个列表

lst1 <- split.default(df1, f1(ncol(df1), 2))
lst2 <- split.default(df2, f1(ncol(df2), 2))

3)Map通过相应的list元素cbindunlist,并使用它们来subset的'df3'列

lst3 <- Map(function(x, y) df3[unlist(cbind(x, y))], lst1, lst2)

数据

df1 <- as.data.frame(matrix(letters[1:10], 2, 5), stringsAsFactors = FALSE)
df2 <- as.data.frame(matrix(1:10, 2, 5))

答案 1 :(得分:0)

看看下面的代码是否有帮助

library(tidyverse)

# Two sample data frames of equal number of columns and rows
df1 = mtcars %>% select(-1)
df2 = diamonds %>% slice(1:32) 

# get the column names
dn1 = names(df1)
dn2 = names(df2)

# create new ordered list
neworder = map(seq(1,length(dn1),2), # sequence with interval 2
               ~c(dn1[.x:(.x+1)], dn2[.x:(.x+1)])) %>% # a vector of two columns each
  unlist %>% # flatten the list
  na.omit # remove NAs arising from odd number of columns

# Get the data frame ordered
df3 = bind_cols(df1, df2) %>% 
  select(neworder)