那里!我有 data.frame 看起来像:
date id s int
1 2021-01-01 1 A 1
2 2021-05-03 1 B 1
3 2021-05-05 1 C 1
4 2021-05-02 2 A 1
5 2021-06-01 2 A 1
6 2021-02-01 2 B 1
7 2021-03-02 3 C 1
8 2021-06-01 3 C 1
我需要添加两列重新计算的值:
- int1 - 对于每个 ID 找到最后一个,但不是“C”,将其设置为 1,其他为 0。如果所有 C 为最后一个 C 设置 1;
- int2 - 对于每个 ID 计数 t$s 并设置 1 除以行数
所以,结果是:
date id s int int1 int2
1 2021-01-01 1 A 1 0 0.33
2 2021-05-03 1 B 1 1 0.33
3 2021-05-05 1 C 1 0 0.33
4 2021-05-02 2 A 1 0 0.33
5 2021-06-01 2 A 1 1 0.33
6 2021-02-01 2 B 1 0 0.33
7 2021-03-02 3 C 1 0 0.50
8 2021-06-01 3 C 1 1 0.50
我知道如何用“for”循环来解决它,但这会降低大数据的速度。我知道“变异”,但还是不明白,请帮助我的例子。
我的数据:
t <- data.frame(date=c('2021-01-01','2021-05-03','2021-05-05','2021-05-02','2021-06-01','2021-02-01','2021-03-02','2021-06-01')
,id=c('1','1','1','2','2','2','3','3')
,s=c('A','B','C','A','A','B','C','C')
,int=c('1','1','1','1','1','1','1','1')
)