当前位置: 首页 > 知识库问答 >
问题:

累加R中每个可能组合的值

景景胜
2023-03-14

假设我有datatest(dput给定),其中list-col表示items:

test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
               ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")

library(tidyverse)
test %>% group_by(ID) %>%
  mutate(dummy = accumulate(items, ~paste(.x, .y)))

我得到的list-col输出如下所示

  items ID        dummy
1     a  1            a
2  b, c  1     a b, a c
3  d, e  1 a b d, a c e
4     f  2            f
5  g, h  2     f g, f h

我希望第3行中有四个项目,每个项目都有可能的组合,即c(“A b D”,“A b E”,“A c D”,“A c E”)。然而,这些是否是列表中的单独项目并不重要。换句话说,dummy的输出可能是多级列表类型,其中row3将包含列表中的四个项目。我尝试使用expand.grid,但我在某处做错了什么!

共有1个答案

司徒泰
2023-03-14

如果要使用所有可能组合,请在.x上使用sapply

library(dplyr)
library(purrr)

test %>% 
  group_by(ID) %>%
  mutate(dummy = accumulate(items, ~c(sapply(.x, paste, .y)))) %>%
  pull(dummy)

#[[1]]
#[1] "a"

#[[2]]
#[1] "a b" "a c"

#[[3]]
#[1] "a b d" "a b e" "a c d" "a c e"

#[[4]]
#[1] "f"

#[[5]]
#[1] "f g" "f h"
 类似资料:
  • 我甚至不确定如何给它一个更好的,而且不明显重复的类型,标题,但我认为这是一个关于expand.grid的不同问题。 所需输出: 尝试: > 给出单行 请求:有人能指出如何将这份4个变量的列表扩展成其中的1、2、3、4的每一个组合,没有重复项吗?

  • 我有一个在不同医院接受治疗的病人的数据集(仅限于住院病人),其中一些分析揭示了几个不一致之处。其中之一是--软件允许病人在不关闭他们之前开放的的情况下入院。 为了更好地理解它,让我们考虑一下示例数据集 如果我们在上面的数据中看到,id为1的患者于1月1日在hospital_1(row-1)入院,并于1月14日出院。出院前患者再次在同一医院入院(第2行);在1月15日(第2行)结束这四项记录之前,再

  • 问题内容: 在不求助于蛮力技术或任何需要STL的情况下,计算n个可能元素的所有可能的length-r组合的最快方法是什么? 在为数据结构课程中的最终项目开发Apriori算法时,我开发了一个有趣的解决方案,该解决方案使用了移位和递归,下面将向有 兴趣的人分享一下答案。但是,这是实现此目标的最快方法(不使用任何公共库)吗? 出于好奇,我提出的要求更多,因为我目前拥有的算法可以很好地满足我的目的。 问

  • 我在写R代码,其中有一个向量“x”,它包含1到100的值,我想创建另一个向量“y”,它在每n个范围内子集一个值的范围。我确信我可以使用rep()和seq(),但我无法找到获得所需的代码。下面是输出应该是什么样子 所以如果我有一个向量x 有什么想法吗?

  • 我希望在R中自动化一个过程,这个过程以前是手工完成的,非常耗时。我想从一个数据帧向另一个数据帧中的每个唯一变量添加一系列观察结果。使用数据的示例可能会更好地说明这一点。。。 表1包含了对每种动物的大量观察,这是我想为每种动物添加一组行的表。 表2显示了应应用于每只动物的行。 最后一个表应该如下所示: 有人能给我指出正确的方向吗?优先使用tidyverse超过基本R(但不是必需的:))