如何根据ID将一列分为两列

时间:2019-05-31 14:49:24

标签: r reshape

我想根据ID变量将数据框的一列扩展为两列。

我的数据如下

df = data.frame(ID = c("M1", "M2", "M2", "M3", "M4", "M4", "M5"),
                Core = c("A", "A","B","B","A","B","A"))

> df
  ID Core
1 M1    A
2 M2    A
3 M2    B
4 M3    B
5 M4    A
6 M4    B
7 M5    A


我想根据“ ID”将“ Core”列分为两部分,因此没有重复的ID。我希望它看起来像这样:

  ID CoreA CoreB
1 M1     1     0
2 M2     1     1
3 M3     0     1
4 M4     1     1
5 M5     1     0

我确定有一个简单的解决方案,但是我很沮丧。

1 个答案:

答案 0 :(得分:1)

选项为spread

library(tidyverse)
df %>%
   mutate(n = 1, Core = str_c("Core", Core)) %>% 
   spread(Core, n, fill = 0)
#   ID CoreA CoreB
#1 M1     1     0
#2 M2     1     1
#3 M3     0     1
#4 M4     1     1
#5 M5     1     0

或与data.table

library(data.table)
dcast(setDT(df), ID ~ paste0("Core", Core), length)