r - 哪个语句具有多个条件在现有列中创建新值
问题描述
我想根据某些条件使用新的附加值修改现有列。请参见下面的示例:
数据集:
description <- c("x value", "y value", "period 01-08-2019 t/m 31-08-2019 faktnr", "x value", "this is a sentence deb nr", "x value", "also a sentence debnr", "deb nr", "y value", "y value")
category_name <- c("x", "y", "", "x", "", "x", "", "", "y", "y")
amount<- c(-100, 200, -200, 10, 50, -3, -500, 100, 1, 1)
FullData_Cleaned <- cbind(description, category_name, amount)
我想做的是根据模式、数量以及该行是否已经有值在此处应用多个条件。如果满足条件,我想填写值“信用”(见下文)
根据上述标准,这应该是输出:
("x", "y", "credit", "x", "", "x", "credit", "", "y", "y")
这是我的代码:
patterns <- c("debnr", "deb nr", "deb.nr", "fcnr", "factnr", "factno", "faktnr")
FullData_Cleaned$category_name <- FullData_Cleaned[which(FullData_Cleaned$description %in% "patterns" & FullData_Cleaned$amount < 0 & FullData_Cleaned$category_name == ""), ] <- "credit"
但是,这行代码用“credit”填充整个列,而不仅仅是空白值。
有没有人可以帮助我?
解决方案
这就是你所追求的吗?它是dplyr
base-R 中的一个解决方案。我发现语法比 base-R 更直观,并且更容易执行更复杂的分析。
首先,您需要将矩阵转换为 data.frame。然后,dplyr::mutate
函数根据函数内的逻辑替换现有列,ifelse
如果逻辑满足,则将其替换为“credit”,或者 category_name 行中的任何内容。
library(dplyr)
FullData_Cleaned = as.data.frame(FullData_Cleaned)
FullData_Cleaned %>%
dplyr::mutate(category_name =
ifelse(stringr::str_detect(description, paste(patterns, collapse="|")) & amount < 0 & category_name == "",
"credit",
category_name)
)
description category_name amount
1: x value x -100
2: y value y 200
3: period 01-08-2019 t/m 31-08-2019 faktnr Credit -200
4: x value x 10
5: this is a sentence deb nr 50
6: x value x -3
7: also a sentence debnr Credit -500
8: deb nr 100
9: y value y 1
10: y value y 1
推荐阅读
- javascript - 如何在单独的组件中打开路由而不卸载 React JS 中的前一个?
- c++ - 为什么阅读要花这么多时间?
- amazon-web-services - df -h 中的文件系统和挂载点
- c - 变量未声明,即使它在 C 程序中
- makefile - `make` 中的 `docs` 关键字是什么以及为什么?
- python - 将列表乘以 ndarrays 列表
- laravel - Laravel + Vue 集成。Vuetify 不起作用
- python - 遮罩和碰撞功能不起作用
- python - 如何在一个图中将python中的曲面和颤动图结合起来
- javascript - 开始滚动动画,它到达该部分