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