gpt4 book ai didi

r - 在 R 中寻找一种直接的方法来完成 Stata 的排序任务

转载 作者:行者123 更新时间:2023-12-03 07:32:20 24 4
gpt4 key购买 nike

我对 R 很陌生,几天来一直在努力做一些 Stata 非常简单的事情。这个问题有 friend 给了我一个比较复杂的答案,但是我想知道有没有简单的方法可以做到以下几点。

假设我有一个两个变量的数据框,组织如下:

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是一个虚拟变量,对于每个类别(即由 category 定义的三个组中的每一个)中的第一个观察值,取值为 1,否则为 0。

(2) var3是一个虚拟变量,对于每个类别中的最后一个观察值取值为 1,否则取值为 0。

(3) var4计算任何特定观察值所属的每个组中有多少观察值(即, category a 为 3, category b 为 4, category c 为 3)

(4) var5记录 var1 中每个观察值之间的差异以及上面的观察

(5) var6记录 var1 中每个观察值之间的差异以及上面的观察,但仅限于 category 定义的组内.

我对 Stata 相当熟悉,我发现使用 bysort 做上述所有事情都不难。前缀命令。例如, var1很容易由 bysort category: gen var1=1 if _n==1 生成.但是最后一天我一直在努力弄清楚如何使用 R 来解决它们。我确定有几种解决方案(我的 friend 涉及 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

非常感谢您的任何建议,提前。抱歉菜鸟问题;我确定这在其他地方得到了回答,但尽管经过数小时的搜索,我还是无法找到它。

最佳答案

dat <- read.table(header = TRUE, 
text =
'category var1
a 1
a 2
a 3
b 4
b 6
b 8
b 10
c 11
c 14
c 17')


(dat <- within(dat, {
var6 <- ave(var1, category, FUN = function(x) c(NA, diff(x)))
var5 <- c(NA, diff(var1))
var4 <- ave(var1, category, FUN = length)
var3 <- rev(!duplicated(rev(category))) * 1
var2 <- (!duplicated(category)) * 1
}))

# category var1 var2 var3 var4 var5 var6
# 1 a 1 1 0 3 NA NA
# 2 a 2 0 0 3 1 1
# 3 a 3 0 1 3 1 1
# 4 b 4 1 0 4 1 NA
# 5 b 6 0 0 4 2 2
# 6 b 8 0 0 4 2 2
# 7 b 10 0 1 4 2 2
# 8 c 11 1 0 3 1 NA
# 9 c 14 0 0 3 3 3
# 10 c 17 0 1 3 3 3

关于r - 在 R 中寻找一种直接的方法来完成 Stata 的排序任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com