我有一个相当大的包含销售信息的数据集。其中一些具有负面salesvalue
(信用票据)。我需要将这些贷方票据连接到原始销售票据,同时保留原始销售日期。没有单个变量指示贷方票据属于哪个销售票据,因此我必须确定所有其他变量都相等的位置。
示例数据:
data <- data.frame(number = 1:4,
Date=c("02-01-2022", "06-01-2022", "07-01-2022", "06-01-2022"),
state = c("filet", "filet", "whole", "filet"),
specie = c("haddock", "cod", "haddock", "cod"),
salesvalue= c(300,500,200,-400),
salesdate=c("01-01-2022", "05-01-2022", "06-01-2022", "12-01-2022"))
data
# number Date state specie value salesdate
# 1 02-01-2022 filet haddock 300 01-01-2022
# 2 06-01-2022 filet cod 500 05-01-2022
# 3 07-01-2022 whole haddock 200 06-01-2022
# 4 06-01-2022 filet cod -400 12-01-2022
我要改salesdate
的salesvalue < 0
至salesdate
哪里salesvalue > 0
和其他条件相同,然后汇总它们。
在这种情况下我想更改 salesdate
从“12-01-2022”到“05-01-2022”的数字 4(与 2 相同,所有其他值都相等)。
这是我尝试过的:
datanew <- data %>%
group_by(Date, state, specie, value) %>%
mutate(date_sale=if_else(value < 0,
first(salesdate[value>0]), salesdate)) %>%
group_by(Date, state, specie, value, salesdate, date_sale) %>%
summarise(value_new=sum(value))
datanew
# Date state specie value salesdate date_sale value_new
<chr> <chr> <chr> <dbl> <chr> <chr> <dbl>
# 02-01-2022 filet haddock 300 01-01-2022 01-01-2022 300
# 06-01-2022 filet cod -400 12-01-2022 NA -400
# 06-01-2022 filet cod 500 05-01-2022 05-01-2022 500
# 07-01-2022 whole haddock 200 06-01-2022 06-01-2022 200
但这并不能解决我的问题。我不知道如何解决这个问题,并且希望得到任何建议!
提前谢谢您!
最佳答案
您可以使用rows_update()
:
library(dplyr)
data %>%
filter(salesvalue >= 0) %>%
select(-c(number, salesvalue)) %>%
rows_update(data, ., by = c("Date", "state", "specie"))
# number Date state specie salesvalue salesdate
# 1 1 02-01-2022 filet haddock 300 01-01-2022
# 2 2 06-01-2022 filet cod 500 05-01-2022
# 3 3 07-01-2022 whole haddock 200 06-01-2022
# 4 4 06-01-2022 filet cod -400 05-01-2022
另一种选择:
data %>%
filter(salesvalue >= 0) %>%
select(-c(number, salesvalue), x = salesdate) %>%
left_join(data, .) %>%
mutate(salesdate = ifelse(salesvalue < 0, x, salesdate)) %>%
select(-x)
关于r - 根据 R 中的其他变量更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74975360/