R 以整洁的方式更改列中的多个值
如图所示,让我们使用内置mpg数据R 以整洁的方式更改列中的多个值,r,list,dplyr,dataset,R,List,Dplyr,Dataset,如图所示,让我们使用内置mpg数据 > mpg %>% select(model) %>% unique() # model # <chr> # 1 a4 # 2 a4 quattro # 3 a6 quattro # ... 是否有一种简单的方法可以将mpg(我们的数据)中存在的$a4中的元素的所有实例更改为子列表“a4”的名称,并将$a6(以及a中可
> mpg %>% select(model) %>% unique()
# model
# <chr>
# 1 a4
# 2 a4 quattro
# 3 a6 quattro
# ...
是否有一种简单的方法可以将mpg(我们的数据)中存在的$a4中的元素的所有实例更改为子列表“a4”的名称,并将$a6(以及a中可能更多的列表元素)的名称更改为子列表“a4”?
或者,是否有“更好”的数据结构可用于此目的
我希望这是在一个“整洁”的时尚。Purrr功能正常,但不适用于循环
提前感谢。您可以使用
重新编码
进行精确匹配,并将一个值替换为另一个值
library(tidyverse)
mpg %>%
mutate(model = recode(model, 'a4 quattro' = 'a4', 'a6 quattro' = 'a6'))
也许如果你有一些像这里这样的模式,你可以使用一些正则表达式来实现所需的输出
mpg %>%
mutate(model = sub(' quattro', '', model))
对于有限值,您可以在以下情况下使用case\u:
mpg %>%
mutate(model = case_when(model %in% c("a4 quattro", "a4 model 2", "model 3") ~ 'a4',
model %in% c("a6 quattro", "model k") ~'a6',
TRUE ~ model))
一个更通用的解决方案是,如果您已经有了一个列表,您可以将其转换为dataframe并与原始数据连接
a <- list(a4 = c("a4 quattro", "a4 model 2", "model 3"),
a6 = c("a6 quattro", "model k"))
enframe(a) %>%
unnest(value) %>%
inner_join(mpg, by = c('value' = 'model'))
a%
unnest(值)%%>%
内部连接(mpg,by=c('value'='model'))
您可以使用重新编码
进行精确匹配,并将一个值替换为另一个值
library(tidyverse)
mpg %>%
mutate(model = recode(model, 'a4 quattro' = 'a4', 'a6 quattro' = 'a6'))
也许如果你有一些像这里这样的模式,你可以使用一些正则表达式来实现所需的输出
mpg %>%
mutate(model = sub(' quattro', '', model))
对于有限值,您可以在以下情况下使用case\u:
mpg %>%
mutate(model = case_when(model %in% c("a4 quattro", "a4 model 2", "model 3") ~ 'a4',
model %in% c("a6 quattro", "model k") ~'a6',
TRUE ~ model))
一个更通用的解决方案是,如果您已经有了一个列表,您可以将其转换为dataframe并与原始数据连接
a <- list(a4 = c("a4 quattro", "a4 model 2", "model 3"),
a6 = c("a6 quattro", "model k"))
enframe(a) %>%
unnest(value) %>%
inner_join(mpg, by = c('value' = 'model'))
a%
unnest(值)%%>%
内部连接(mpg,by=c('value'='model'))
看看tidyfast::dt\u case\u when()。此函数的语法与dplyr::case_when()相同,但它是基于非常快的数据构建的。table::fifelse()。请查看tidyfast::dt_case_when()。此函数的语法与dplyr::case_when()相同,但它是基于非常快的数据构建的。table::fifelse()。