如何在R中获得一个数据帧(长表)中两个组的差异?

如何在R中获得一个数据帧(长表)中两个组的差异?,r,dataframe,R,Dataframe,我有一个给定的数据帧: days classtype scores 1 1 a 49 2 1 b 47 3 2 a 36 4 2 b 41 它由以下给定代码生成: days=c(1,1,2,2) classtype=c("a","b","a","b") scores=c(49,47,36,41) myData=data.frame(days,classtype,score

我有一个给定的数据帧:

  days classtype scores
1    1         a     49
2    1         b     47
3    2         a     36
4    2         b     41
它由以下给定代码生成:

days=c(1,1,2,2)
classtype=c("a","b","a","b")
scores=c(49,47,36,41)
myData=data.frame(days,classtype,scores)
print(myData)
我需要在代码中添加哪些行来计算每天两门课的分数差?我希望获得以下输出:

  days difference_in_scores
1    1                    2
2    2                   -5

你可以采取的一种方法

library(dplyr)
library(reshape2)

days=c(1,1,2,2)
classtype=c("a","b","a","b")
scores=c(49,47,36,41)
myData=data.frame(days,classtype,scores)

myData %>% 
  # convert the data to wide format
  dcast(days ~ classtype, 
        value.var = "scores") %>% 
  # calculate differences
  mutate(difference_in_scores = a - b) %>% 
  # remove columns (just to match your desired output)
  select(days, difference_in_scores)

你可以采取的一种方法

library(dplyr)
library(reshape2)

days=c(1,1,2,2)
classtype=c("a","b","a","b")
scores=c(49,47,36,41)
myData=data.frame(days,classtype,scores)

myData %>% 
  # convert the data to wide format
  dcast(days ~ classtype, 
        value.var = "scores") %>% 
  # calculate differences
  mutate(difference_in_scores = a - b) %>% 
  # remove columns (just to match your desired output)
  select(days, difference_in_scores)

如果数据的格式与您所显示的一致,则可以使用
数据非常简洁地完成此操作。表

setDT(myData)
myData[, diff(scores), by = days]
   days V1
1:    1 -2
2:    2  5
或者只使用base-R:

aggregate(scores ~ days, myData, FUN = diff)

如果数据的格式与您所显示的一致,则可以使用
数据非常简洁地完成此操作。表

setDT(myData)
myData[, diff(scores), by = days]
   days V1
1:    1 -2
2:    2  5
或者只使用base-R:

aggregate(scores ~ days, myData, FUN = diff)