我有一个包含两列的数据框。第一列具有组,第二列具有值。
我希望每个分组都是一列,并且希望所有相关的值都在适当的列下。
我更喜欢tidyverse解决方案。如果可能的话,我更喜欢一个解决方案,该解决方案可以自动获取每个组并在其下创建一个具有适当值的新列。我不想手动键入标题。
这就是我所拥有的:
df <- data.frame(Group = c("A", "A", "A", "B", "B", "B"),
Value = c(2,2,2,3,3,3))
df$Group <- as.character(df$Group)
这就是我想要的:
want <- data.frame(A = c(2,2,2),
B = c(3,3,3))
答案 0 :(得分:2)
通过tidyverse
,我们可以在按“组”创建序列列后使用pivot_wider
library(dplyr)
library(tidyr)
df %>%
group_by(Group) %>%
mutate(rn = row_number()) %>%
pivot_wider(names_from = Group, values_from = Value) %>%
select(-rn)
# A tibble: 3 x 2
# A B
# <dbl> <dbl>
#1 2 3
#2 2 3
#3 2 3
在base R
中,可以与unstack
一起使用
unstack(df, Value ~ Group)
或与data.table
library(data.table)
dcast(setDT(df), rowid(Group) ~ Group, value.var = 'Value')[, .(A, B)]