我有一個非常基本的問題,因為我對 R 比較陌生。我想知道如何將特定列中的值分別添加到資料中每個橫截面單元的前一列中。我的資料如下所示:
firm date value
A 1 10
A 2 15
A 3 20
A 4 0
B 1 0
B 2 1
B 3 5
B 4 10
C 1 3
C 2 2
C 3 10
C 4 1
D 1 7
D 2 3
D 3 6
D 4 9
我想實作下面的資料。所以我想遞增地對每個橫截面單位的值求和。
firm date value cumulative value
A 1 10 10
A 2 15 25
A 3 20 45
A 4 0 45
B 1 0 0
B 2 1 1
B 3 5 6
B 4 10 16
C 1 3 3
C 2 2 5
C 3 10 15
C 4 1 16
D 1 7 7
D 2 3 10
D 3 6 16
D 4 9 25
下面是一個可重現的示例代碼。我試過,lag()但不知道如何為每家公司重復一遍。
firm <- c("A","A","A","A","B","B","B","B","C","C","C", "C","D","D","D","D")
date <- c("1","2","3","4","1","2","3","4","1","2","3","4", "1", "2", "3", "4")
value <- c("10", "15", "20", "0", "0", "1", "5", "10", "3", "2", "10", "1", "7", "3", "6", "9")
data = data.frame(firm=firm, date=date, value=value)
謝謝!
uj5u.com熱心網友回復:
這是否有效:
library(dplyr)
df %>% group_by(firm) %>% mutate(cumulative_value = cumsum(value))
# A tibble: 16 x 4
# Groups: firm [4]
firm date value cumulative_value
<chr> <int> <int> <int>
1 A 1 10 10
2 A 2 15 25
3 A 3 20 45
4 A 4 0 45
5 B 1 0 0
6 B 2 1 1
7 B 3 5 6
8 B 4 10 16
9 C 1 3 3
10 C 2 2 5
11 C 3 10 15
12 C 4 1 16
13 D 1 7 7
14 D 2 3 10
15 D 3 6 16
16 D 4 9 25
uj5u.com熱心網友回復:
使用base R與ave
data$cumulative_value <- with(data, ave(value, firm, FUN = cumsum))
-輸出
> data
firm date value cumulative_value
1 A 1 10 10
2 A 2 15 25
3 A 3 20 45
4 A 4 0 45
5 B 1 0 0
6 B 2 1 1
7 B 3 5 6
8 B 4 10 16
9 C 1 3 3
10 C 2 2 5
11 C 3 10 15
12 C 4 1 16
13 D 1 7 7
14 D 2 3 10
15 D 3 6 16
16 D 4 9 25
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318530.html
上一篇:Rdata.table按組排序,每組底部有“other”
下一篇:申請dlply
