我有一個關于 R 通過行的負累積和的問題,我怎樣才能獲得所需的輸出:
# TEST
data <- data.frame(
`Delivery Year` = c('1976','1977','1978','1979'),
`Freq` = c(120,100,80,60),
`Year.1976` = c(10,3,8,0),
`Year.1977` = c(5,0,5,0),
`Year.1978` = c(10,10,0,0),
`Year.1979` = c(13,0,0,14)
)
data
# DESIRED
data <- data.frame(
`Delivery Year` = c('1976','1977','1978','1979'),
`Freq` = c(120,100,80,60),
`Year.1` = c(110,97,72,60),
`Year.2` = c(105,97,67,60),
`Year.3` = c(95,87,67,60),
`Year.4` = c(82,87,67,46)
)
data

uj5u.com熱心網友回復:
使用dplyr和 的一種解決方案purrr可能是:
data %>%
mutate(pmap_dfr(across(-1), ~ accumulate(c(...), `-`)))
Delivery.Year Freq Year.1 Year.2 Year.3 Year.4
1 1976 120 110 105 95 82
2 1977 100 97 97 87 87
3 1978 80 72 67 67 67
4 1979 60 60 60 60 46
同base R:
Reduce(`-`, data[-1], accumulate = TRUE)
uj5u.com熱心網友回復:
基數R
data[,3:6] <- data$Freq - t(apply(data[,3:6], 1, cumsum))
names(data)[3:6] <- paste0("Year.", 1:4)
data
# Delivery.Year Freq Year.1 Year.2 Year.3 Year.4
# 1 1976 120 110 105 95 82
# 2 1977 100 97 97 87 87
# 3 1978 80 72 67 67 67
# 4 1979 60 60 60 60 46
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318546.html
標籤:r
上一篇:R函式將行中的日期轉換為時間跨度
