首页 > 解决方案 > R如何根据2个条件修改数据框中的条目

问题描述

使用 R 清理一些杂乱的数据。假设我有一个数据框 df:

    配料 面包 PB 果酱  
1“面包、铅、果酱”  
2“铅,果酱”x  
3“面包”x  
4“面包”x  
...

我将如何设置执行以下操作的条件:
如果相应的(面包、PB、果酱)列有 x,并且没有像“面包、面包”这样的冗余条目,则修改成分列中的条目

因此,清洁后的成分列将显示为:

原料:
“面包,铅,果酱”
“面包,铅,果酱”         
“面包”               
“面包,果酱”                     

非常感谢!

标签: rdata-cleaning

解决方案


这是根据您的描述的基本 R 解决方案

df$Ingredients <- apply(df,1, function(v) {
  if (sum(v[-1]=="x")>0) {
    u <- unique(c(names(v[-1])[which(v[-1]=="x")],unlist(strsplit(v[1],","))))
    paste0(na.omit(u[match(names(v[-1]),u)]),collapse = ",")
  } else {
    v[1]
  }
}
)

这样

> df
   Ingredients Bread PB Jam
1 Bread,PB,Jam     o  o   o
2 Bread,Jam,PB     x  o   o
3        Bread     x  o   o
4    Bread,Jam     o  o   x

数据

df <- structure(list(Ingredients = c("Bread,PB,Jam", "PB,Jam", "Bread", 
"Bread"), Bread = c("o", "x", "x", "o"), PB = c("o", "o", "o", 
"o"), Jam = c("o", "o", "o", "x")), class = "data.frame", row.names = c(NA, 
-4L))

推荐阅读