如何根据ID将一列分成两列
How to spread one column into two based on ID
我想根据 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
我确定有一个简单的解决方案,但我很困惑。
一个选项是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)
我想根据 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
我确定有一个简单的解决方案,但我很困惑。
一个选项是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)