我想根据数据中是否存在列来有条件地
unnest_wider
。如果该列存在,那么它应该 unnest_wider
,但如果不存在,那么它不应该执行任何操作。我希望我能做这样的事情:
df1 <- tibble(letters = c('a', 'b', 'c'), values1 = list(1:2, 3:4, 5:6))
# works
df1 %>% unnest_wider(values1, names_repair = ~gsub('...', 'values1_', ., fixed = TRUE))
# doesn't work
df1 %>% unnest_wider(across(any_of("values2")), names_repair = ~gsub('...', 'values1_', ., fixed = TRUE))
我知道为什么最后一行代码不起作用,但我想完成类似的事情。谢谢。
类似的东西有用吗:
conditional_unnest <- function(df, var){
if(var %in% names(df)){
return(unnest_wider(df, var, names_repair = ~gsub('...', 'values1_', ., fixed = TRUE)))
} else{
return(df)
}
}
df1 %>%
conditional_unnest("values1")
这里有一个使用
tidyr 1.3.1
的方法:
df1 %>%
unnest_wider(
matches("^values2$"),
names_repair = ~gsub('...', 'values1_', ., fixed = TRUE)
)