【发布时间】:2022-12-31 08:25:08
【问题描述】:
我有以下数据框:
`1_X94` <- c("apple", "lemon", "orange")
`2_X94` <- c("apple", "strawberry", "lemon")
`1_X09` <- c(1, 2, 3)
`2_X09` <- c(4, 5, 6)
`1_X38` <- c("red", "yellow", "orange")
`2_X38` <- c("red", "red", "yellow")
df <- data.frame(`1_X94`, `2_X94`, `1_X09`, `2_X09`, `1_X38`, `2_X38`)
我有第二个数据框:
fruit <- c("apple", "watermelon")
fruit_list <- data.frame(fruit)
我想要完成的是,只要有一个列名的正则表达式模式为 ^\d+_X94?,其值与 fruit_list 数据框匹配,它就会用 ^\d+_X38 的正则表达式模式替换列名“绿色。”
我目前有以下代码,但我想添加一些自动化方面,这样我就不必列出 str_detect() 中的所有水果并为 X1、X2 等创建多个 mutate 命令。
library(tidyverse)
library(stringr)
df <- df %>%
mutate(
X1_X38 = case_when(
str_detect(X1_X94, "apple|watermelon") ~ "green",
TRUE ~ .$X1_X38
)
) %>%
mutate(
X2_X38 = case_when(
str_detect(X2_X94, "apple|watermelon") ~ "green",
TRUE ~ .$X2_X38
)
)
任何指导将不胜感激。
【问题讨论】: