早上好,
我有一个双列数据集,我想根据Dplyr中的group_by传播到更多列,但我不确定如何。
我的数据如下:
Person Case
John A
John B
Bill C
David F
我希望能够将其转换为以下结构:
Person Case_1 Case_2 ... Case_n
John A B
Bill C NA
David F NA
我最初的想法是:
data %>%
group_by(Person) %>%
spread()
Error: Please supply column name
实现这一目标的最简单或最类似R的方式是什么?
答案 0 :(得分:4)
您应首先向数据集添加案例ID,这可以通过group_by
和mutate
的组合来完成:
dat = data.frame(Person = c('John', 'John', 'Bill', 'David'), Case = c('A', 'B', 'C', 'F'))
dat = dat %>% group_by(Person) %>% mutate(id = sprintf('Case_%d', row_number()))
dat %>% head()
# A tibble: 4 × 3
Person Case id
<fctr> <fctr> <chr>
1 John A Case_1
2 John B Case_2
3 Bill C Case_1
4 David F Case_1
现在您可以使用spread
转换数据:
dat %>% spread(Person, Case)
# A tibble: 2 × 4
id Bill David John
* <chr> <fctr> <fctr> <fctr>
1 Case_1 C F A
2 Case_2 NA NA B
您可以使用以下列表获取上面列出的结构:
res = dat %>% spread(Person, Case) %>% select(-id) %>% t() %>% as.data.frame()
names(res) = unique(dat$id)
res
Case_1 Case_2
Bill C <NA>
David F <NA>
John A B