r dplyr group_by 值折叠并粘贴
r dplyr group_by values collapse and paste
我有一个看起来像这样的数据集
Id Subject Date Vitals Value
10 John 2001-05-29 HeartRate 65
10 John 2001-05-29 HeartRate 68
10 John 2001-05-29 BP-Arterial 48
10 John 2001-05-29 PulseRate 64
34 Pete 2005-08-15 HeartRate 68
34 Pete 2005-08-15 BP-Arterial 56
10 John 2004-09-25 HeartRate 65
10 John 2004-09-25 BP-Arterial 64
10 John 2004-09-25 PulseRate 63
34 Pete 2007-07-21 BP-Arterial 68
34 Pete 2007-07-21 PulseRate 56
我想做两件事,
1) 按 Vitals 分组。
2) 计算在特定日期为每个 ID 测量的生命体征数量 (ID + Date)
并像下面这样折叠并粘贴这些值。
Vitals Series
HeartRate 2,1,1
BP-Arterial 1,1,1,1
PulseRate 1,1,1
HeartRate
的“系列”列下的值为 2, 1, 1
,因为测量了心率
2001 年 5 月 29 日 ID 10 两次,
2005 年 8 月 15 日 ID 34 一次,
2004 年 9 月 24 日 ID 10 一次
不确定如何使用 dplyr 折叠和粘贴这些值,非常感谢任何帮助。
Count the number of Vitals that were measured for each ID on a specific date (ID + Date)
这意味着您需要按所有三个分组。然后我们可以仅通过 vitals 重新组合以进行最终崩溃:
dat %>% group_by(Vitals, Id, Date) %>%
summarize(n = n()) %>%
ungroup() %>%
group_by(Vitals) %>%
summarize(Series = paste(n, collapse = ','))
# # A tibble: 3 × 2
# Vitals Series
# <fctr> <chr>
# 1 BP-Arterial 1,1,1,1
# 2 HeartRate 2,1,1
# 3 PulseRate 1,1,1
使用 dplyr
和 rle
即 运行 长度编码,请参阅 ?rle
了解更多详情
library(dplyr)
newDF = DF %>%
group_by(Id,Date) %>%
do(.,data.frame(Series=paste(rle(.$Vitals)$lengths,collapse=","),stringsAsFactors=FALSE)) %>%
as.data.frame()
newDF
# Id Date Series
#1 10 2001-05-29 2,1,1
#2 10 2004-09-25 1,1,1
#3 34 2005-08-15 1,1
#4 34 2007-07-21 1,1
我有一个看起来像这样的数据集
Id Subject Date Vitals Value
10 John 2001-05-29 HeartRate 65
10 John 2001-05-29 HeartRate 68
10 John 2001-05-29 BP-Arterial 48
10 John 2001-05-29 PulseRate 64
34 Pete 2005-08-15 HeartRate 68
34 Pete 2005-08-15 BP-Arterial 56
10 John 2004-09-25 HeartRate 65
10 John 2004-09-25 BP-Arterial 64
10 John 2004-09-25 PulseRate 63
34 Pete 2007-07-21 BP-Arterial 68
34 Pete 2007-07-21 PulseRate 56
我想做两件事,
1) 按 Vitals 分组。
2) 计算在特定日期为每个 ID 测量的生命体征数量 (ID + Date)
并像下面这样折叠并粘贴这些值。
Vitals Series
HeartRate 2,1,1
BP-Arterial 1,1,1,1
PulseRate 1,1,1
HeartRate
的“系列”列下的值为 2, 1, 1
,因为测量了心率
2001 年 5 月 29 日 ID 10 两次,
2005 年 8 月 15 日 ID 34 一次,
2004 年 9 月 24 日 ID 10 一次
不确定如何使用 dplyr 折叠和粘贴这些值,非常感谢任何帮助。
Count the number of Vitals that were measured for each ID on a specific date (ID + Date)
这意味着您需要按所有三个分组。然后我们可以仅通过 vitals 重新组合以进行最终崩溃:
dat %>% group_by(Vitals, Id, Date) %>%
summarize(n = n()) %>%
ungroup() %>%
group_by(Vitals) %>%
summarize(Series = paste(n, collapse = ','))
# # A tibble: 3 × 2
# Vitals Series
# <fctr> <chr>
# 1 BP-Arterial 1,1,1,1
# 2 HeartRate 2,1,1
# 3 PulseRate 1,1,1
使用 dplyr
和 rle
即 运行 长度编码,请参阅 ?rle
了解更多详情
library(dplyr)
newDF = DF %>%
group_by(Id,Date) %>%
do(.,data.frame(Series=paste(rle(.$Vitals)$lengths,collapse=","),stringsAsFactors=FALSE)) %>%
as.data.frame()
newDF
# Id Date Series
#1 10 2001-05-29 2,1,1
#2 10 2004-09-25 1,1,1
#3 34 2005-08-15 1,1
#4 34 2007-07-21 1,1