我已经开始逐渐从 Excel 转向 R,但在(相对简单的)计算方面我仍然遇到一些困难。
我想创建变量x的频率版本,我们将其命名为“xFrequency”。
请查看下面我的数据示例。
所需的变量 x 频率基本上应该计算特定时期(国家年)内 x 的数量。在样本数据中,观察期为1990年至1995年。因此,1994年加拿大总共收到了4个x。
也许有一个相关的函数?谢谢!
country year x xfrequency
CAN 1990 1 1
CAN 1991 0 0
CAN 1992 1 2
CAN 1993 0 0
CAN 1994 2 4
CAN 1995 1 5
USA 1990 0 0
USA 1991 2 2
USA 1992 1 3
USA 1993 0 0
USA 1994 1 4
USA 1995 0 0
GER 1990 NA NA
GER 1991 1 1
GER 1992 0 0
GER 1993 1 2
GER 1994 2 4
GER 1995 1 5
最佳答案
示例 data.table 假设您的数据集位于名为 data
的变量中:
library(data.table)
setDT(data)
data[is.na(x),x := 0] # Remove the NA as a sum of anything with NA is NA
data[, xfreq := cumsum(x), by=country]
这给出:
country year x xfrequency xfreq
1: CAN 1990 1 1 1
2: CAN 1991 0 0 1
3: CAN 1992 1 2 2
4: CAN 1993 0 0 2
5: CAN 1994 2 4 4
6: CAN 1995 1 5 5
7: USA 1990 0 0 0
8: USA 1991 2 2 2
9: USA 1992 1 3 3
10: USA 1993 0 0 3
11: USA 1994 1 4 4
12: USA 1995 0 0 4
13: GER 1990 0 NA 0
14: GER 1991 1 1 1
15: GER 1992 0 0 1
16: GER 1993 1 2 2
17: GER 1994 2 4 4
18: GER 1995 1 5 5
这并不完全是您预期的输出,但根据您给出的描述,xfreq 列似乎就是您正在寻找的内容。
为了获得准确的输出,我们可以在 x 为 0 时将 xfreq 重置为 0:
> data[x==0,xfreq := 0]
> data
country year x xfrequency xfreq
1: CAN 1990 1 1 1
2: CAN 1991 0 0 0
3: CAN 1992 1 2 2
4: CAN 1993 0 0 0
5: CAN 1994 2 4 4
或者通过一次测试:
data[, xfreq := ifelse(x==0,0L,cumsum(x)), by=country]
关于r - 如何计算 R 中的频率(计数)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451318/