使用 R 编程连接列中的唯一值,但如果列中已存在任何值,则重置连接
Concatenate unique values from a column, but reset concatenation if any of the value already exists in the column using R programming
这是一个df
id name
1 A
1 B
1 C
1 A
1 A
2 C
2 D
具有计算列的所需输出
id name calculated_column
1 A A,B,C
1 B A,B,C
1 C A,B,C
1 A A,B,C
1 B A,B,C
1 C A,B,C
1 B B,C
1 C B,C
1 A A
1 A A
1 A A
2 C C,D
2 D C,D
我想我也许可以创建一个序列列并进行串联,但我真的卡住了。
我想使用 dplyr,但我愿意接受其他建议。
df <- df %>%
group_by(id) %>%
arrange(date) %>%
mutate(calculated_column = ... ?)
一个data.table
解决方案:
library(data.table)
dt <- data.table(id = c(rep(1L, 11), rep(2L, 2)), nm = LETTERS[c(1,2,3,1,2,3,2,3,1,1,1,3,4)])
dt[, grp := nm <= shift(nm, fill = Inf), by = id][, grp := cumsum(grp)][, calc := .(.(nm)), by = grp][, c("nm", "calc")]
#> nm calc
#> 1: A A,B,C
#> 2: B A,B,C
#> 3: C A,B,C
#> 4: A A,B,C
#> 5: B A,B,C
#> 6: C A,B,C
#> 7: B B,C
#> 8: C B,C
#> 9: A A
#> 10: A A
#> 11: A A
#> 12: C C,D
#> 13: D C,D
这是一个df
id name
1 A
1 B
1 C
1 A
1 A
2 C
2 D
具有计算列的所需输出
id name calculated_column
1 A A,B,C
1 B A,B,C
1 C A,B,C
1 A A,B,C
1 B A,B,C
1 C A,B,C
1 B B,C
1 C B,C
1 A A
1 A A
1 A A
2 C C,D
2 D C,D
我想我也许可以创建一个序列列并进行串联,但我真的卡住了。
我想使用 dplyr,但我愿意接受其他建议。
df <- df %>%
group_by(id) %>%
arrange(date) %>%
mutate(calculated_column = ... ?)
一个data.table
解决方案:
library(data.table)
dt <- data.table(id = c(rep(1L, 11), rep(2L, 2)), nm = LETTERS[c(1,2,3,1,2,3,2,3,1,1,1,3,4)])
dt[, grp := nm <= shift(nm, fill = Inf), by = id][, grp := cumsum(grp)][, calc := .(.(nm)), by = grp][, c("nm", "calc")]
#> nm calc
#> 1: A A,B,C
#> 2: B A,B,C
#> 3: C A,B,C
#> 4: A A,B,C
#> 5: B A,B,C
#> 6: C A,B,C
#> 7: B B,C
#> 8: C B,C
#> 9: A A
#> 10: A A
#> 11: A A
#> 12: C C,D
#> 13: D C,D