我是R的新手,并且已经挣扎了几天才能做出Stata非常简单的事情 . 朋友给了我一个相对复杂的答案,但是我想知道是否有一种简单的方法可以做到以下几点 .
假设我有一个两个变量数据帧,组织如下:
category var1
a 1
a 2
a 3
b 4
b 6
b 8
b 10
c 11
c 14
c 17
我想生成五个额外的变量,每个变量都应该插入到同一个数据帧中: var2
, var3
, var4
, var5
和 var6
(1) var2
是一个虚拟变量,它取每个类别中第一次观察的值1(即由 category
定义的三个组中的每一个),否则为0 .
(2) var3
是一个虚拟变量,它取每个类别中最后一次观察的值1,否则为0 .
(3) var4
计算任何特定观察所属的每组中的观察数量(即, category
为3, category
为4, category
为3)
(4) var5
记录 var1
中每次观察与其上方观察之间的差异
(5) var6
记录 var1
中每个观测值与其上方观测值之间的差异,但仅限于 category
定义的组内 .
我对Stata非常了解,我发现使用 bysort
前缀命令并不难做到 . 例如, var1
很容易生成 var1
. 但是我确定有几个解决方案(我的朋友参与了 ddplyr
包,这似乎比我的工资高出一步) . 没有什么比 bysort
容易吗?
最终数据集应如下所示:
category var1 var2 var3 var4 var5 var6
a 1 1 0 3 n/a n/a
a 2 0 0 3 1 1
a 3 0 1 3 1 1
b 4 1 0 4 1 n/a
b 6 0 0 4 2 2
b 8 0 0 4 2 2
b 10 0 1 4 2 2
c 11 1 0 3 1 n/a
c 14 0 0 3 3 3
c 17 0 1 3 3 3
非常感谢任何建议,提前 . 对不起新手问题;我确信这在其他地方得到了解答,但是尽管经过了数小时的搜索,我还是找不到它 .
2 回答
答案使用
dplyr