如何重塑分组行的值变为列的数据? (从长到宽?)
How to reshape data where values of grouped rows become columns? (long to wide?)
我四处寻找合适的答案,但我认为这个问题还没有得到解答。本质上,我有一个长格式的数据框,如下所示:
ID event_type event_value
123 A 1.1
123 A 1.2
123 A "Hello"
234 B "Hello"
456 A 2.8
其中有多个具有各种值的事件类型。我想要做的是重塑数据,使其看起来像这样
ID event_type_A_1 event_type_A_2 event_type_A_3 event_type_B_1
123 1.1 1.2 "Hello" NA
234 NA NA NA "Hello"
456 2.8 NA NA NA
使得新列延伸到任何给定患者的最长事件类型,其余列填充 NA。我已经弄乱了 spread()
和 cast()
,但由于某种原因它就是没有点击。谢谢!
您可以使用 dplyr
和 tidyr
执行此操作。诀窍是使用 group_by
并使用 mutate
和 row_number
添加组内索引。
library(dplyr)
library(tidyr)
df <- data_frame(ID = c(123,123,123,234,456),
event_type = c("A","A","A","B","A"),
event_value = c(1.1, 1.2, "Hello", "Hello", 2.8))
df %>%
group_by(ID) %>%
mutate(sub_ID = row_number()) %>%
unite("ID_type", event_type, sub_ID,remove = TRUE) %>%
spread(ID_type, event_value)
打破 dplyr
链条:
- 按 ID 分组
- 用
row_number()
创建 sub_ID
- 将
event_type
和 sub_ID
与 unite
合并并删除原始列
spread()
ID_type 的值来自 event_value
我四处寻找合适的答案,但我认为这个问题还没有得到解答。本质上,我有一个长格式的数据框,如下所示:
ID event_type event_value
123 A 1.1
123 A 1.2
123 A "Hello"
234 B "Hello"
456 A 2.8
其中有多个具有各种值的事件类型。我想要做的是重塑数据,使其看起来像这样
ID event_type_A_1 event_type_A_2 event_type_A_3 event_type_B_1
123 1.1 1.2 "Hello" NA
234 NA NA NA "Hello"
456 2.8 NA NA NA
使得新列延伸到任何给定患者的最长事件类型,其余列填充 NA。我已经弄乱了 spread()
和 cast()
,但由于某种原因它就是没有点击。谢谢!
您可以使用 dplyr
和 tidyr
执行此操作。诀窍是使用 group_by
并使用 mutate
和 row_number
添加组内索引。
library(dplyr)
library(tidyr)
df <- data_frame(ID = c(123,123,123,234,456),
event_type = c("A","A","A","B","A"),
event_value = c(1.1, 1.2, "Hello", "Hello", 2.8))
df %>%
group_by(ID) %>%
mutate(sub_ID = row_number()) %>%
unite("ID_type", event_type, sub_ID,remove = TRUE) %>%
spread(ID_type, event_value)
打破 dplyr
链条:
- 按 ID 分组
- 用
row_number()
创建 sub_ID
- 将
event_type
和sub_ID
与unite
合并并删除原始列 spread()
ID_type 的值来自event_value