考虑以下示例数据:

library(tidyverse)

dt <- tibble(Poison = c('Arsenic', 'Arsenic in Wine', 'Cyanide', 'Cyanide and Sugar'),
             Result = c('Death', 'Death With Class', 'Death', 'Death'))

我想创建一个列, for each 组指定一个标识号.然而,我希望通过字符串检测将毒物分组在一起,即,"砷"和"wine中的砷"是一组,"氰化物"和"氰化物和糖"是另一组.目前,R认 for each 组都是自己的,这样:

dt <- dt %>%
  group_by(Poison) %>%
  mutate(Group = n())
# A tibble: 4 × 3
# Groups:   Poison [4]
  Poison            Result           Group
  <chr>             <chr>            <int>
1 Arsenic           Death                1
2 Arsenic in Wine   Death With Class     1
3 Cyanide           Death                1
4 Cyanide and Sugar Death                1

我希望它是这样,'砷'和'wine中的砷'是第一组,和'氰化物'和'氰化物和糖'是第二组.有什么 idea 吗?

推荐答案

case_whengrepl的组合可能是有用的:

dt %>% 
  mutate(Group = case_when(
    grepl("Arsenic", Poison) ~ 1,
    grepl("Cyanide", Poison) ~ 2
  ))
# A tibble: 4 × 3
  Poison            Result           Group
  <chr>             <chr>            <dbl>
1 Arsenic           Death                1
2 Arsenic in Wine   Death With Class     1
3 Cyanide           Death                2
4 Cyanide and Sugar Death                2

如果你不想写任何poisson,这可能是有用的:

dt %>% 
  mutate(Group = sub(" .*", "", Poison) %>% 
           as.factor %>% 
           as.integer())

R相关问答推荐

如何从其他前面列中减go 特定列的平均值?

如果索引重复,聚合xts核心数据

terra nearest()仅为所有`to_id`列返回NA

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

如何在R中合并两个基准点?

在ggplot2中更改小提琴情节的顺序

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

当我们有多个反斜杠和/特殊字符时使用Gsubing

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

将多个列值转换为二进制

如何使这些react 表对象相互独立?

如何在R中使用hmm TMB提前一步预测观察到的状态?

如何将这个小列表转换为数据帧?

在具有多个响应变量的比例堆叠条形图上方添加总计

如何提取R中其他字符串和数字之间的字符串?

如何获取R chromote中的当前URL?

具有由向量定义的可变步长的序列

列间序列生成器的功能

如果缺少时间,如何向日期-时间列添加时间

Data.table条件合并