r - R如何根据2个条件修改数据框中的条目
问题描述
使用 R 清理一些杂乱的数据。假设我有一个数据框 df:
配料 面包 PB 果酱 1“面包、铅、果酱” 2“铅,果酱”x 3“面包”x 4“面包”x ...
我将如何设置执行以下操作的条件:
如果相应的(面包、PB、果酱)列有 x,并且没有像“面包、面包”这样的冗余条目,则修改成分列中的条目
因此,清洁后的成分列将显示为:
原料: “面包,铅,果酱” “面包,铅,果酱” “面包” “面包,果酱”
非常感谢!
解决方案
这是根据您的描述的基本 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))
推荐阅读
- html - Jquery UI 对话框表单按钮类型更改提交
- android - 调用 Observable, ... 而不是 execute()
- r - dplyr 组合多个结果
- victory-charts - 在水平 Victory 条形图中定位 y 轴标签
- r - R Shiny 允许用户选择要显示的图
- amazon-web-services - Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null
- java - 等号的java正确实现?
- vue.js - 带有 Eslint 的 Vite.js 上的 Vue 3 — 无法解析模块 eslint 的路径(import/no-unresolved)
- react-native - 如果我添加隐藏状态栏,则反应本机滚动视图不起作用
- c# - 使用 CsvHelper 时如何处理数据中的引号?