因为一张桌子胜过一千个字,所以我想做的是:
| 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()来实现它,但它没有给我预期的结果。
使用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)
如果数据集对 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)