我是R的初学者,感谢本网站的所有帮助。但我一直无法找到解决一个小问题的方法......
我有3列数据:SchoolName,Year,SATScore
有许多不同的学校名称,每个学校名称都有一个“年”,范围从2001年到2012年。 (例如,JFK高中有12年的SAT数据)。
对于每所高中,我需要计算2012年SAT成绩与2001年SAT成绩之间的差异。
Excel中的数据透视表会在几分钟内完成,但我想学习如何在R中执行此操作。
提前致谢,
保
答案 0 :(得分:1)
答案取决于数据的格式。如果它看起来像这样
dat <- structure(list(shool = c("a", "a", "a", "b", "b", "b", "c", "c",
"c"), year = c(2001L, 2004L, 2012L, 2001L, 2005L, 2012L, 2001L,
2007L, 2012L), sat = c(12L, 45L, 5L, 6L, 8L, 9L, 44L, 55L, 5L
)), .Names = c("shool", "year", "sat"), class = "data.frame", row.names = c(NA,
-9L))
>dat
# shool year sat
#1 a 2001 12
#2 a 2004 45
#3 a 2012 5
#4 b 2001 6
#5 b 2005 8
#6 b 2012 9
#7 c 2001 44
#8 c 2007 55
#9 c 2012 5
然后你就可以做到:
dat$sat[dat$year == 2012] - dat$sat[dat$year == 2001]
如果事情没有那么好,我建议:
library(plyr)
ddply(dat, .(shool), summarise,
difference = sat[year == 2012] - sat[year == 2001] )
# shool difference
# 1 a -7
# 2 b 3
# 3 c -39
答案 1 :(得分:0)
我假设您的数据位于名为data的数据框中。您可以执行以下操作:
data2001 <- data.frame(SchoolName = data[data$Year == 2001, ]$SchoolName, Score2001 = data[data$Year == 2001, ]$SATscore)
data2012 <- data.frame(SchoolName = data[data$Year == 2012, ]$SchoolName, Score2012 = data[data$Year == 2012, ]$SATscore)
stats <- merge(data2001, data2012)
stats$Difference <- stats$Score2012 - stats$Score2001