Мне очень неприятно задавать два вопроса подряд, но это то, над чем я не могу окутать голову. Так скажем, у меня есть кадр данных, следующий образом:Вычитание по разным строкам и столбцам и разделение по группам
df
Row# User Morning Evening Measure Date
1 1 NA NA 2/18/11
2 1 50 115 2/19/11
3 1 85 128 2/20/11
4 1 62 NA 2/25/11
5 1 48 100.8 3/8/11
6 1 19 71 3/9/11
7 1 25 98 3/10/11
8 1 NA 105 3/11/11
9 2 48 105 2/18/11
10 2 28 203 2/19/11
11 2 35 80.99 2/21/11
12 2 91 78.25 2/22/11
Можно ли в R взять разницу между предыдущим днем подряда (и только в предыдущий день, а не предыдущий результат) вечернее значение 1 строка и утреннее значение другой строки для каждой группы пользователей? Поэтому мои желаемые результаты были бы такими.
df
Row# User Morning Evening Date Difference
1 1 NA NA 2/18/11 NA
2 1 50 115 2/19/11 NA
3 1 85 129 2/20/11 30
4 1 62 NA 2/25/11 NA
5 1 48 100.8 3/8/11 NA
6 1 19 71 3/9/11 81.8
7 1 25 98 3/10/11 46
8 1 10 105 3/11/11 88
9 2 48 105 2/18/11 NA
10 2 28 203 2/19/11 77
11 2 35 80.99 2/21/11 NA
12 2 91 78.25 2/22/11 -10.01
Все, что я хочу, чтобы это сделать, это принять утреннее значение и вычесть его из вечернего значения предыдущего дня подряда для каждой группы пользователей. Как вы можете видеть, некоторые части моего фрейма данных содержат значения NA в утренних и вечерних столбцах, кроме того, не все даты находятся в последовательном порядке для каждого другого пользователя, поэтому, естественно, следует назначить NA.
Я пробовал искать Google, но не было информации о возможности применения функций к различным строкам для каждой группы строк в разных столбцах (если это имеет смысл).
Мои попытки включают в себя множество вариантов этого.
df$Difference<-ave((df$Morning,df$Evening),
df$User,
FUN=function(x){
c('NA',diff(df$Evening-df$Morning)),na.rm=T
})
С другой стороны, любая помощь будет принята с благодарностью. Благодарю.
Вы действительно должны отметить использование '#' в именах столбцов ... – juba