假设R中有以下变量:

vals <- c("b", "c")
foo <- data.frame(x=c("a|b", "b|c", "c|d", "e|f|g"))

我想要foo中另一栏的条目数量从vals开始,例如

> foo2
      x y
1   a|b 1
2   b|c 2
3   c|d 1
4 e|f|g 0

1因为"a|b"有"b",2因为"b|c"有"b"和"c",等等.

我如何使用tidyVerse函数来做到这一点?

我可以拆分x,但交叉口不起作用.几次失败的try :

library(dplyr)
library(magrittr)

> foo2 <- foo %>% mutate(x1=str_split(x, "\\|"), y=intersect(vals, x1))
Error in `mutate()`:
ℹ In argument: `y = intersect(vals, x1)`.
Caused by error:
! `y` must be size 4 or 1, not 0.
> foo2 <- foo %>% mutate(x1=str_split(x, "\\|"), y=intersect(vals, x1[[1]]))
> foo2
      x      x1 y
1   a|b    a, b b
2   b|c    b, c b
3   c|d    c, d b
4 e|f|g e, f, g b

推荐答案

您需要map(或lapply)您的intersect才能将其分别应用于每一行:

library(purrr)

foo |>
  mutate(
    xsplit = strsplit(x, split = "|", fixed = TRUE),
    intersect = map(xsplit, intersect, vals),
    y = lengths(intersect)
  )
#       x  xsplit intersect y
# 1   a|b    a, b         b 1
# 2   b|c    b, c      b, c 2
# 3   c|d    c, d         c 1
# 4 e|f|g e, f, g           0

R相关问答推荐

在R中,如何创建时间间隔的图表?

按条件计算观察次数

在边界外添加注释或标题

按R中的组查找相邻列的行累积和的最大值

使用tidyverse方法绑定行并从一组管道列表执行左连接

从R导出全局环境中的所有sf(numrames)对象

更改默认系列1以更改名称

在另一个函数中调用ggplot2美学

删除具有相同标题的tabPanel(shinly)

即使硬币没有被抛出,也要保持对其的跟踪

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

如何指定我的函数应该查找哪个引用表?

展开对数比例绘图的轴(添加填充)

如何计算R glm probit中的线性预测因子?

如何在R中改变fviz_pca_biplot中圆的边界线的 colored颜色 ?

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

计算来自单独分组的分幅的值的百分位数

生存时间序列的逻辑检验

Ggplot2:添加更多特定 colored颜色 的线条