我正在处理一个大型数据集,在这里我需要创建一个新列并分配适当的标签。例如,我有包含水果和蔬菜混合物的行,我想要一个新的列,它将该行标识为水果、蔬菜或混合。理想的结果是:
# name type
# 1 apple fruit
# 2 bananas fruit
# 3 kale vegetable
# 4 apple, kale mixed虽然我成功地识别了包含单个“项”的行的类型,但我在为“混合”类型编写代码时遇到了困难。我正在考虑使用和(例如,水果和蔬菜混合)。但这不管用。是否有一种高效/正确的混合实例编码方法?我感谢你的帮助,谢谢!!
现在我要说的是:
df <- data.frame(name = c('apple','bananas','kale','apple, kale'),
stringsAsFactors = FALSE)
df$type <- factor(df$name) # First step: copy vector and make it factor
#Change levels:
levels(df$type) <- list(
fruit = c("apple", "bananas"),
vegetable = c("kale")
)发布于 2022-05-04 14:55:42
下面是使用purrr和dplyr包的解决方案:
library(dplyr)
library(purrr)
l <- list(
fruit = c("apple", "bananas"),
vegetable = c("kale")
)
v <- unlist(l)
nm <- gsub("\\d", "", setNames(names(v), v))
df %>%
mutate(type = map_chr(strsplit(name, ", "), ~ if (n_distinct(nm[.x]) > 1) "mixed" else nm[.x]))输出
name type
1 apple fruit
2 bananas fruit
3 kale vegetable
4 apple, kale mixed是如何工作的
name转换为type。例如,fruit.name,我们将name拆分成一个列表:strsplit(df$name, ", ")
[[1]]
[1] "apple"
[[2]]
[1] "bananas"
[[3]]
[1] "kale"
[[4]]
[1] "apple" "kale" purrr样式函数。如果返回的唯一类型的数量大于一个,则值为mixed,否则将从命名向量mixed返回该值。https://stackoverflow.com/questions/72114917
复制相似问题