我有一个像这样的数据框:
data.frame(name = c("a", "b", "c", "d"),
date = c("2018-09", "2018-10", "2018-9", "2018-11"))
并且我想将共享日期的任何名称合并为用逗号分隔的一行,第二列显示共享日期
data.frame(name = c("a,c", "b", "d"),
date = c("2018-09", "2018-10", "2018-11"))
答案 0 :(得分:1)
我认为与您的样本数据不同的日期格式是真实的,即您拥有"2018-09"
和"2018-9"
对应于同一月+年的数据。
在这种情况下,您可以执行以下操作
df %>%
mutate(date = as.Date(paste0(date, "-01"), "%Y-%m-%d")) %>%
group_by(date) %>%
summarise(name = toString(name)) %>%
mutate(date = format(date, format = "%Y-%m"))
# # A tibble: 3 x 2
# date name
# <chr> <chr>
#1 2018-09 a, c
#2 2018-10 b
#3 2018-11 d
df <- data.frame(name = c("a", "b", "c", "d"),
date = c("2018-09", "2018-10", "2018-9", "2018-11"))
答案 1 :(得分:0)
您可以在dplyr
中使用group_by
和summarize
进行此操作。
由于您正在使用日期,因此必须将它们设置为标准化格式(在示例中不是这样),以便将相同的日期视为相同。
在我看来,lubridate
软件包是最简单的方法。在下面的示例中,我们将日期变量解析为4位数字的年份Y
和十进制月份m
,然后按与以前相同的日期进行分组:
df2 <- data.frame(name = c("a", "b", "c", "d"),
date = c("2018-09", "2018-10", "2018-9", "2018-11"))
df2 %>%
mutate(date = lubridate::parse_date_time(date, 'Ym')) %>%
group_by(date) %>%
summarise(name = paste0(name, collapse = ','))
# A tibble: 3 x 2
date name
<dttm> <chr>
1 2018-09-01 00:00:00 a,c
2 2018-10-01 00:00:00 b
3 2018-11-01 00:00:00 d
答案 2 :(得分:0)
使用@divibisan答案中的R基数aggregate
和df
:
> aggregate(name~date, data=df, paste, collapse = ",")
date name
1 2018-09 a,c
2 2018-10 b
3 2018-11 d