r-将多列数据帧折叠为一个数据帧



由于某种原因,我有一个数据,其中几列是由一列组成的一组数据帧。所以,我想"塌陷";这些列的数据帧合并为一个数据帧。

library(tidyverse)
df <- tibble(col1=1:5, 
col2=tibble(newcol=LETTERS[1:5]),
col3=tibble(newcol2=LETTERS[6:10]))
df
# A tibble: 5 x 3
col1 col2$newcol col3$newcol2
<int> <chr>       <chr>       
1     1 A           F           
2     2 B           G           
3     3 C           H           
4     4 D           I           
5     5 E           J  

我尝试过unnest(),但是,该函数实际上为col1的每一行复制col2和col3的数据帧,这不是我想要的。

df2 <- df %>% unnest(cols = c(col2, col3))
df2
# A tibble: 25 x 3
col1 col2  col3 
<int> <chr> <chr>
1     1 A     F    
2     1 B     G    
3     1 C     H    
4     1 D     I    
5     1 E     J    
6     2 A     F    
7     2 B     G    
8     2 C     H    
9     2 D     I    
10     2 E     J    
# ... with 15 more rows

我想要的结果如下:

df3 <- tibble(col1=1:5, 
newcol=LETTERS[1:5],
newcol2=LETTERS[6:10])
df3
# A tibble: 5 x 3
col1 newcol newcol2
<int> <chr>  <chr>  
1     1 A      F      
2     2 B      G      
3     3 C      H      
4     4 D      I      
5     5 E      J  

知道怎么做吗?非常感谢您的帮助。

您似乎只想更改列名,或者我在这里遗漏了什么?

df<-df%>%mutate(col2=df$col2$newcol, col3=df$col3$newcol2)

在你发表评论后,你可以在这里找到一个更通用的版本(可能不适合所有用例(

df1<-df%>%unnest(cols = c(1:3))%>%
group_by(col1)%>%
mutate(row=row_number())%>%
filter(row==col1)%>%
select(-row)

如果我理解正确,您有三个数据帧,每个数据帧包含一列。现在,您希望将它们放在一个数据帧中。则cbind是一个选项。

df3 <- cbind(df, col2, col3)

输出:

col1 newcol newcol2
1    1      A       F
2    2      B       G
3    3      C       H
4    4      D       I
5    5      E       J

最新更新