在r中查找分类数据的差异
我不熟悉这个网站和R语言,这是我在这里的第一个问题:) 我正在分析一组美国人民在不同年份和不同州的工资数据(总共30人被标记为1,2,…,30)。开始年份(1970年)相同,但结束年份不同(1990年至2000年)。对于每一个州,我希望找出结束年和开始年工资之间的差异。我写了以下内容,但不起作用:在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
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请参见上文。谢谢。在下面发布了一个解决方案。请检查这是否有帮助