我在R中有一个数据帧列表(Df1),由40个数据帧组成,每个数据帧只有1列(V1)。我想将df1中的所有数据帧连接到一个数据帧( df2 )中,其中df1中的每个数据帧都变成了df2中的一列。
到目前为止,我是这样做的:
df2 <- bind_rows(df1, .id = "column_label")
head(df2)
column_label V1
Hazt miR-92
Hazt miR-92
Hazt miR-92
Hazt miR-184
Hazt miR-184
PPee miR-92
PPee miR-3然而,如前所述,我希望新的数据帧看起来像这样
Hazt PPee
miR-92 miR-92
miR-92 miR-3
miR-92
miR-184
miR-184其列数与原始数据帧在df1中的列数一样多。
发布于 2020-12-15 05:25:57
我们可以使用pivot_wider
library(dplyr)
library(tidyr)
library(data.table)
df2 %>%
mutate(rn = rowid(column_label)) %>%
pivot_wider(names_from = column_label, values_from = V1, values_fill = "") %>%
select(-rn)-output
# A tibble: 5 x 2
# Hazt PPee
# <chr> <chr>
#1 miR-92 "miR-92"
#2 miR-92 "miR-3"
#3 miR-92 ""
#4 miR-184 ""
#5 miR-184 "" 数据
df2 <- structure(list(column_label = c("Hazt", "Hazt", "Hazt", "Hazt",
"Hazt", "PPee", "PPee"), V1 = c("miR-92", "miR-92", "miR-92",
"miR-184", "miR-184", "miR-92", "miR-3")), class = "data.frame",
row.names = c(NA,
-7L))发布于 2020-12-15 05:54:58
如果df1是一个list,那么试试这个:
df2 <- do.call("cbind",df1)如果您的数据帧具有不同的行数,请尝试以下操作:
df1 <- lapply(df1, function(x,n){if(nrow(x)<n){x[n,]<-NA};return(x)},n = max(sapply(df1,nrow)))
do.call("cbind",df1)发布于 2020-12-15 09:54:40
使用list2DF + unstack的基本R选项
> list2DF(lapply(u <- unstack(rev(df2)), `length<-`, max(lengths(u))))
Hazt PPee
1 miR-92 miR-92
2 miR-92 miR-3
3 miR-92 <NA>
4 miR-184 <NA>
5 miR-184 <NA>https://stackoverflow.com/questions/65296676
复制相似问题