假设我有以下数据帧(真实的是10个labelx列):
id <- c(1,2,3,4,5,6,7,8)
label1 <- c("apple","shoe","banana","hat","dog","radio","tree","pie")
label2 <- c("apple","sneaker","fruit","beanie","pet","ipod","doug fir","pie")
df <- data.frame(id,label1,label2)
我想将标签列中的所有项目替换为对其进行分类的单词。
food <- c("apple","banana","pie","fruit")
clothing <- c("shoe","hat","beanie")
entertainment <- c("radio","ipod","mp3 player","phone")
forest <- c("tree","doug fir","redwood","forest")
我尝试过以下内容:
column_list <- c("label1","label2")
new_df <- df
for(i in 1:2) {
new_df <- new_df %>%
mutate(parse(text=column_list[i-1]) = replace(parse(text=column_list[i-1]),
(parse(text=column_list[i-1]) %in% food),
"food"))
}
我不必这样做,更容易也很好。Tidyverse首选。如何在R数据帧中的多个列之间替换多个值?
解决办法:一种可能是使用mutate_at()然后嵌套ifelse():
df %>%
mutate_at(vars(contains("label")),
funs(ifelse(. %in% food, "food",
ifelse(. %in% clothing, "clothing",
ifelse(. %in% entertainment, "entertainment",
ifelse(. %in% forest, "forest", NA_character_))))))
id label1 label2
1 1 food food
2 2 clothing <NA>
3 3 food food
4 4 clothing clothing
5 5 <NA> <NA>
6 6 entertainment entertainment
7 7 forest forest
8 8 food food
使用mutate_at(),它选择名称中带有“label”的变量,然后ifelse()根据条件简单地应用嵌套。








暂无数据