我有一个2列数据框.第一列包含一类项目(在本例中为蔬菜)的单个条目.第二列是即将到来的new_item个,它们是不同类别(肉类、水果、蔬菜等)的食品杂货.

library(tidyverse)
current <- tibble::tribble(
             ~prev_veg,   ~new_item,
             "cabbage",   "lettuce",
                    NA,     "apple",
                    NA,     "beef",
                    NA,   "spinach",
                    NA,  "broccoli",
                    NA,     "mango"
             )
current

我想循环浏览new item列,只添加蔬菜到prev_veg.任何新的蔬菜项目都需要添加到现有列表中.重要的是,我有一个可能出现在列表中的所有蔬菜的矢量.下面是所需的数据帧.

target_veg <- c("cabbage","lettuce", "spinach", "broccoli"

    desired <- tibble::tribble(
      ~prev_veg,   ~new_item,
      "cabbage",   "lettuce",
      "cabbage, lettuce",     "apple",
      "cabbage, lettuce", "strawbery",
      "cabbage, lettuce",   "spinach",
      "cabbage, lettuce, spinach",  "broccoli",
      "cabbage, lettuce, spinach, broccoli",     "mango"
    )

desired

最后,这个数据框架中还有多个其他数据列,我在这里没有包括(只包括相关列).理想的dplyr解决方案.

推荐答案

current <- tibble::tribble(
  ~prev_veg, ~new_item,
  "cabbage", "lettuce",
  NA, "apple",
  NA, "beef",
  NA, "spinach",
  NA, "broccoli",
  NA, "mango"
)
target_veg <- c("cabbage", "lettuce", "spinach", "broccoli")

library(dplyr, warn.conflicts = FALSE)
library(purrr)

current %>%
  mutate(
    prev_veg = accumulate(
      head(new_item, -1),
      ~ if_else(.y %in% target_veg, paste(.x, .y, sep = ", "), .x),
      .init = prev_veg[1]
    )
  )
#> # A tibble: 6 × 2
#>   prev_veg                            new_item
#>   <chr>                               <chr>   
#> 1 cabbage                             lettuce 
#> 2 cabbage, lettuce                    apple   
#> 3 cabbage, lettuce                    beef    
#> 4 cabbage, lettuce                    spinach 
#> 5 cabbage, lettuce, spinach           broccoli
#> 6 cabbage, lettuce, spinach, broccoli mango

reprex package(v2.0.1)于2022-02-24创建

R相关问答推荐

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

self_函数无法工作--无法子集结束后的列

在R中列表的结尾添加数字载体

计算R中的威布尔分布的EDF

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

如何使用按钮切换轨迹?

Data.table';S GForce-将多个函数应用于多列(带可选参数)

Geom_Hline将不会出现,而它以前出现了

如何根据R中其他变量的类别汇总值?

KM估计的差异:SvyKm与带权重的调查

将全局环境变量的名称分配给列表中的所有元素

R+reprex:在呈现R标记文件时创建可重现的示例

有没有办法将不等长的列表转换为R中的数据帧

如何根据未知数的多列排除重复行

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

如何在AER::ivreg中指定仪器?

如何使用包metaviz更改标签的小数位数?

是否从列中删除★符号?

如何在R中创建这些列?

将美学添加到ggploy中的文本标签