我有一个分组的数据框,如下所示:
df <- data.frame(group = rep(1:4, each=3),
lets = rep(LETTERS[1:4], times=3))
现在,对于每一行,我要标识同一组中除行本身的
lets
之外的所有lets
。使用dplyr
我可以这样获取所有lets
:df %>%
group_by(group) %>%
mutate(all_lets_in_group = paste(lets, collapse=','))
但是,如何从提供给
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=',')))
使用设置操作
setdiff
从组的集合中减去purrr::map
提供的当前字母,然后使用paste
重新格式化矢量列表并返回为字符矢量。关于r - 除当前行外的所有组成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43129384/