Naprawdę nienawidzę zadawać dwóch pytań z rzędu, ale jest to coś, czego nie mogę objąć. Więc powiedzmy, że mam ramki danych, w następujący sposób:Odejmowanie w różnych wierszach i kolumnach i oddzielone przez grupę
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
Czy jest możliwe w R wziąć różnicę między poprzednim dzień z rzędu (i tylko poprzedniego dnia, a nie poprzedni wynik) wartość wieczorną 1 wiersz i wartość poranna innego rzędu dla każdej grupy użytkowników? Tak więc moje pożądane rezultaty byłyby takie.
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
Wszystko czego chcę to zrobić, to przyjąć wartość rano i odjąć go od wartości wieczorem poprzedniego rzędu dzień dla każdej grupy użytkowników. Jak widać, niektóre części mojej ramki danych zawierają wartości NA w porannych i wieczornych kolumnach, ponadto nie wszystkie daty są w kolejnej kolejności dla każdego innego użytkownika, więc naturalnie NA powinna zostać przypisana.
Próbowałem wyszukiwać google, ale nie było wiele informacji na temat możliwości zastosowania funkcji do różnych wierszy dla każdej grupy wierszy w różnych kolumnach (jeśli ma to jakiś sens).
Moje próby obejmują wiele odmian tego.
df$Difference<-ave((df$Morning,df$Evening),
df$User,
FUN=function(x){
c('NA',diff(df$Evening-df$Morning)),na.rm=T
})
Ponownie, każda pomoc będzie bardzo ceniona. Dzięki.
Naprawdę powinni pamiętać użyć '#' w swoich nazwach kolumn ... – juba