/ / dplyr błąd z backendem data.table [w dplyr 0.4.3 lub wcześniejszym] - r, data.table, dplyr

dplyr bug z backendem data.table [w dplyr 0.4.3 lub wcześniejszym] - r, data.table, dplyr

Gdy przeglądałem odpowiedzi tutaj, Znalazłem to rozwiązanie działa dokładnie zgodnie z oczekiwaniami data.frame.

library(dplyr) # dplyr_0.4.3
library(data.table) # data.table_1.9.5
df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L),
a = c("AA",
"AB", "AA", "AB", "AB", "AB", "AB", "AA", "AA"), b = c(2L, 5L,
1L, 2L, 4L, 4L, 3L, 1L, 4L)), .Names = c("id", "a", "b"),
class = "data.frame", row.names = c(NA, -9L))


df %>%
group_by(id) %>%
mutate(relevance=+(a!="AA")) %>%
mutate(mean=cumsum(relevance * b) / cumsum(relevance))

Source: local data frame [9 x 5]
Groups: id [3]

id     a     b relevance  mean
(int) (chr) (int)     (int) (dbl)
1     1    AA     2         0   NaN
2     1    AB     5         1   5.0
3     1    AA     1         0   5.0
4     2    AB     2         1   2.0
5     2    AB     4         1   3.0
6     3    AB     4         1   4.0
7     3    AB     3         1   3.5
8     3    AA     1         0   3.5
9     3    AA     4         0   3.5

Jednak po uruchomieniu z data.table, spowodowało coś poza moim zrozumieniem.

setDT(df) %>%
group_by(id) %>%
mutate(relevance=+(a!="AA")) %>%
mutate(mean=cumsum(relevance * b) / cumsum(relevance))

Source: local data table [9 x 5]

id     a     b relevance     mean
(int) (chr) (int)     (int)    (dbl)
1     1    AA     2         0      NaN
2     1    AB     5         1 5.000000
3     1    AA     1         0 5.000000
4     2    AB     2         1 3.500000
5     2    AB     4         1 3.666667
6     3    AB     4         1 3.750000
7     3    AB     3         1 3.600000
8     3    AA     1         0 3.600000
9     3    AA     4         0 3.600000

Czy to jest oczekiwane zachowanie? Jeśli tak, czy istnieją jakieś wytyczne dotyczące tego, kiedy nie należy go używać data.table backend z dplyr?

Odpowiedzi:

4 dla odpowiedzi № 1

Błąd powodujący porzucenie grupowania mutate w tabeli danych został rozwiązany w wersji 0.5.0.