在r中查找分类数据的差异

在r中查找分类数据的差异,r,categorical-data,date-difference,R,Categorical Data,Date Difference,我不熟悉这个网站和R语言,这是我在这里的第一个问题:) 我正在分析一组美国人民在不同年份和不同州的工资数据(总共30人被标记为1,2,…,30)。开始年份(1970年)相同,但结束年份不同(1990年至2000年)。对于每一个州,我希望找出结束年和开始年工资之间的差异。我写了以下内容,但不起作用: for (i in 1:30) { salarygrowth <- function(salary[state == "i", time == max(1990:2000, na.rm=FA

我不熟悉这个网站和R语言,这是我在这里的第一个问题:)

我正在分析一组美国人民在不同年份和不同州的工资数据(总共30人被标记为1,2,…,30)。开始年份(1970年)相同,但结束年份不同(1990年至2000年)。对于每一个州,我希望找出结束年和开始年工资之间的差异。我写了以下内容,但不起作用:

for (i in 1:30) {
  salarygrowth <- function(salary[state == "i", time == max(1990:2000, na.rm=FALSE)], salary[state == "i", time == 1970]) { 
  salary[state == "i", time == max(1990:2000, na.rm=FALSE)] - salary[state == "i", time == 1970]}
}

我们可以使用按组聚合函数来实现这一点。一个选项是
dplyr
。我们按“状态”进行累加,得到最大“时间”对应的“工资”与最小“时间”之间的差额

library(dplyr)
df1 %>%
  group_by(state) %>%
  summarise(salary = salary[which.max(time)]- salary[which.min(time)])
另一个选项是,如果“时间”列未排序,我们将按
arrange
对其排序,然后使用
first
last
提取薪资的第一个、最后一个值并取其差

df1 %>%
   group_by(state) %>%
   arrange(time) %>%
   summarise(salary=last(salary)- first(salary)) 
 salary <- with(df1, salary[!duplicated(state, fromLast=TRUE)]-
                     salary[!duplicated(state)])
 data.frame(state=unique(df1$state), salary)

或者使用
data.table
,我们将“data.frame”转换为“data.table”(
setDT(df1)
),按“state”分组,
order
按“time”分组,得到最后(
.N
)和第一(
1L
)“salary”的差值

library(data.table)
setDT(df1)[order(time), list(salary=salary[.N]- salary[1L]), by = state]

或者,如果“时间”和“状态”是有序的,我们也可以使用“状态”列上的
duplicated
来获取逻辑索引,提取“工资”以获取差异

df1 %>%
   group_by(state) %>%
   arrange(time) %>%
   summarise(salary=last(salary)- first(salary)) 
 salary <- with(df1, salary[!duplicated(state, fromLast=TRUE)]-
                     salary[!duplicated(state)])
 data.frame(state=unique(df1$state), salary)

salary@akrun请参见上文。谢谢。在下面发布了一个解决方案。请检查这是否有帮助