使用R在某些行上进行计算

时间:2013-12-23 23:02:04

标签: r dataframe

我是R的初学者,感谢本网站的所有帮助。但我一直无法找到解决一个小问题的方法......

我有3列数据:SchoolName,Year,SATScore

有许多不同的学校名称,每个学校名称都有一个“年”,范围从2001年到2012年。 (例如,JFK高中有12年的SAT数据)。

对于每所高中,我需要计算2012年SAT成绩与2001年SAT成绩之间的差异。

Excel中的数据透视表会在几分钟内完成,但我想学习如何在R中执行此操作。

提前致谢,

2 个答案:

答案 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