我有一个分组数据框,如下所示:
df <- data.frame(group = rep(1:4, each=3),
lets = rep(LETTERS[1:4], times=3))
Run Code Online (Sandbox Code Playgroud)
对于每一行,我现在想要识别lets除lets行本身之外的同一组中的所有行.使用dplyr我可以得到所有 lets:
df %>%
group_by(group) %>%
mutate(all_lets_in_group = paste(lets, collapse=','))
Run Code Online (Sandbox Code Playgroud)
但是,如何从我输入的内容中排除lets当前行paste()?
这个任务的目的不是很清楚,因此代码的清晰度也会受到影响,但仍然:
library(tidyverse)
df %>%
group_by(group) %>%
mutate(
all_lets_in_group = lets %>%
map(function(l) setdiff(., l)) %>%
map_chr(function(x) paste(x, collapse=',')))
Run Code Online (Sandbox Code Playgroud)
使用集合操作从组的集合setdiff中减去 提供的当前字母purrr::map,然后使用 重新格式化向量列表并paste返回为字符向量。