假设我们有以下数据框:
df <- data.frame(ID = c(1,1,2,2,3,3),
value1 = c(1,2,1,2,2,3),
value2 = c(2,2,2,3,3,3))
我们要对每个ID的行进行拼接,只包含唯一的值。我们可以使用dplyr
和tidyr
包中的函数:
library(dplyr)
library(tidyr)
df %>%
group_by(ID) %>%
gather(key, value, -ID) %>%
distinct(ID, value) %>%
unite(tmp, value, sep = ",", na.rm = TRUE) %>%
group_by(ID) %>%
summarize(output = paste(tmp, collapse = "; "))
这会产生以下输出:
# A tibble: 3 x 2
ID output
1 1 1,2,2
2 2 1,2,3
3 3 2,3
我们首先按ID和所有列进行分组,将数据框从"宽"变为"长"格式,然后使用distinct
函数仅保留每个ID的唯一值。使用unite
函数将唯一值拼接到一个新列中,然后按ID分组并使用summarize
函数将每个ID的拼接值合并到一个字符串中。
下一篇:按ID将行转换为列