热线电话:13121318867

登录
2019-02-27 阅读量: 702
如何在R数据帧中的多个列之间替换多个值?

假设我有以下数据帧(真实的是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()根据条件简单地应用嵌套。

0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子