我有一个分组的数据框,如下所示:

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/

10-12 19:37