如何根据另一列中的另一个值收集列中的数据

gen*_*i01 2 pivot r dataframe

因为一张桌子胜过一千个字,所以我想做的是:

A栏 B栏 C栏 D 栏
艾米 1.5 x1 y1
STR 2 x2 y2
艾米 4.5 x2 y3
STR 3 x3 y4

我想根据 A 列的值将 B 列中的所有数据重新组合到一个列中。A 列的每个值形成一个列名称。这是在一个新的数据框中。

艾米 STR
1.5 2
4.5 3

多谢 !

我尝试使用gather()和unite()来实现它,但它没有给我预期的结果。

MrF*_*ick 6

使用dplyr你tidyr可以做

library(dplyr)
library(tidyr)

df1 %>% 
  select(ColumnA, ColumnB) %>% 
  pivot_wider(names_from="ColumnA", values_from="ColumnB", values_fn = list) %>% 
  unnest(cols=everything())
Run Code Online (Sandbox Code Playgroud)


akr*_*run 5

如果数据集对 ColumnA 值具有相同数量的观测值,则选择列并unstack在base R

unstack(df1[1:2], `Column B`~ `Column A`)
  AMY STR
1 1.5   2
2 4.5   3
Run Code Online (Sandbox Code Playgroud)

或者正如 @onyambu 提到的,它也可以在没有form指定 ula 的情况下工作

unstack(df1[1:2])
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- structure(list(`Column A` = c("AMY", "STR", "AMY", "STR"), 
`Column B` = c(1.5, 
2, 4.5, 3), `Column C` = c("x1", "x2", "x2", "x3"), `Column D` = c("y1", 
"y2", "y3", "y4")), class = "data.frame", 
row.names = c(NA, -4L
))
Run Code Online (Sandbox Code Playgroud)

  • 惊人的解决方案,考虑`unstack(df1[2:1])` (3认同)