首页 > 解决方案 > 按条件填充数据框列中的空值

问题描述

我有以下数据框。现在我想通过确定代码44和90的值来填充“产品”中的空值。44应该是“衬衫”和90“毛衣”。

最好的方法是什么?用for循环?

data = data.frame("code" = c(44,78,21,90,100,44,90), "product" = c("","hat","shoe","","umbrella","",""))
> data
  code  product
1   44         
2   78      hat
3   21     shoe
4   90         
5  100 umbrella
6   44         
7   90      

标签: rdataframeif-statement

解决方案


使用dplyr首先将产品变量转换为字符(来自因子),然后使用case_when

library(dplyr)
data %>% 
  mutate_if(is.factor, as.character) %>% 
  mutate(product = case_when(product == "" & code == 44 ~ "shirt",
                             product == "" & code == 90 ~ "sweater",
                             TRUE ~ product))

  code  product
1   44    shirt
2   78      hat
3   21     shoe
4   90  sweater
5  100 umbrella
6   44    shirt
7   90  sweater

使用base相同的想法 - 首先将因子转换为字符然后使用 ifelse

i <- sapply(data, is.factor)
data[i] <- lapply(data[i], as.character)

data$product[data$product == ""] <- ifelse(data$code[data$product == ""] == 44, "shirt", "sweater")
data
  code  product
1   44    shirt
2   78      hat
3   21     shoe
4   90  sweater
5  100 umbrella
6   44    shirt
7   90  sweater

另外值得注意的是,如果您使用data.frame所有stringsAsFactors = FALSE因子转换变得不必要。


推荐阅读