我有一个要重新排序的巨大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)
但是,给我一个“未定义列选择错误”。
答案 0 :(得分:0)
没有可重复的例子尚不清楚。根据描述,我们可以split
将数据集的列放入list
的数据集中,并使用Map
来cbind
相应的数据集的列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
元素cbind
和unlist
,并使用它们来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)