[英]R: Replicate value in the column of a dataframe based on a condition
我有以下數據框:
Categ <- rep(c("BODY", "FACE"), times = c(8,4))
Brand1 <- rep(c("XXX", "YYY"), times = c(8,4))
Product1 <- rep(c("X1", "X2", "Y1"), each =4)
Month <- rep(c("01-18", "02-18", "03-18", "04-18"), times =3)
Sales1 <- c(0,300,0,0,0,0,20,0,0,400,0,0)
df <- data.frame(Categ,Brand1, Product1,Month, Sales1 )
df
Categ Brand1 Product1 Month Sales1
1 BODY XXX X1 01-18 0
2 BODY XXX X1 02-18 300
3 BODY XXX X1 03-18 0
4 BODY XXX X1 04-18 0
5 BODY XXX X2 01-18 0
6 BODY XXX X2 02-18 0
7 BODY XXX X2 03-18 20
8 BODY XXX X2 04-18 0
9 FACE YYY Y1 01-18 0
10 FACE YYY Y1 02-18 400
11 FACE YYY Y1 03-18 0
12 FACE YYY Y1 04-18 0
如何將列 Sales1 中的值復制到 [i-1] 之前的一個單元格和 [i+1] 同一列中的值之后的一個單元格?
輸出應如下所示:
Categ Brand1 Product1 Month Sales1
1 BODY XXX X1 01-18 300
2 BODY XXX X1 02-18 300
3 BODY XXX X1 03-18 300
4 BODY XXX X1 04-18 0
5 BODY XXX X2 01-18 0
6 BODY XXX X2 02-18 20
7 BODY XXX X2 03-18 20
8 BODY XXX X2 04-18 20
9 FACE YYY Y1 01-18 400
10 FACE YYY Y1 02-18 400
11 FACE YYY Y1 03-18 400
12 FACE YYY Y1 04-18 0
如果可能,我正在尋找基礎 R 的解決方案。 任何人都可以幫忙嗎?
我們可以對按“Categ”、“Brand1”和“Product1”分組的“Sales1”的lead
和lag
值使用pmax
library(dplyr)
df %>%
group_by(Categ, Brand1, Product1) %>%
mutate(Sales1 = pmax(Sales1, lead(Sales1), lag(Sales1), na.rm = TRUE))
# A tibble: 12 x 5
# Groups: Categ [2]
# Categ Brand1 Product1 Month Sales1
# <fct> <fct> <fct> <fct> <dbl>
# 1 BODY XXX X1 01-18 300
# 2 BODY XXX X1 02-18 300
# 3 BODY XXX X1 03-18 300
# 4 BODY XXX X1 04-18 0
# 5 BODY XXX X2 01-18 0
# 6 BODY XXX X2 02-18 20
# 7 BODY XXX X2 03-18 20
# 8 BODY XXX X2 04-18 20
# 9 FACE YYY Y1 01-18 400
#10 FACE YYY Y1 02-18 400
#11 FACE YYY Y1 03-18 400
#12 FACE YYY Y1 04-18 0
或者,如果我們需要base R
方法,請在ave
使用相同的方法
df$Sales1 <- with(df, ave(Sales1, Categ, Brand1, Product1,
FUN = function(x) pmax(x, c(0, x[-length(x)]), c(x[-1], 0))))
df$Sales1
#[1] 300 300 300 0 0 20 20 20 400 400 400 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.