我的列表如下:
tryout<- list(c("stomach:biopsy", ",colon:biopsy", ",stomach:biopsy"),
character(0), character(0), "oesophagus:biopsy", character(0),
character(0))
我想用数字1代替术语"stomach:biopsy"
。我想用case_when
中的dplyr
来代替
我尝试过:
lapply(tryout, function(x)
x %>%
mutate(group = case_when(
grepl("stomach:biopsy",x ) ~ 1
)))
但是我得到了错误:
Error in UseMethod("mutate_") :
no applicable method for 'mutate_' applied to an object of class "character"
那么如何为嵌套列表运行case_when?
答案 0 :(得分:4)
由于空白元素很多,我们可以创建一个索引来检查是否至少有一个元素。根据模式将list
和replace
子集
i1 <- lengths(tryout) > 0
tryout[i1] <- lapply(tryout[i1], function(x) replace(x, x == 'stomach:biopsy', 1))
如果它是部分匹配项,则按照OP的帖子使用grep
tryout[i1] <- lapply(tryout[i1], function(x)
replace(x, grep('stomach:biopsy', x), 1))
根据OP的评论,有多种模式需要替换。在这种情况下,最好先创建一个键/值数据集或命名向量,然后执行left_join/match
等。在这种情况下,由于它是部分匹配项,因此最好使用{{1 }}来自regex_left_join
fuzzyjoin
答案 1 :(得分:0)
检查此解决方案:
library(tidyverse)
tryout <-
tibble(
var = list(
c("stomach:biopsy", ",colon:biopsy", ",stomach:biopsy"),
character(0),
character(0),
"oesophagus:biopsy",
character(0),
character(0))
)
tryout %>%
mutate(var = map(var, ~case_when(
.x == 'stomach:biopsy' ~ '1',
TRUE ~ .x
))) %>%
pull(var)