2016-12-21 5 views
1

Почему значения для SE_daily не так ли? Я ожидал, что он округляется до ближайшего целого числа (хотя я и хотел десятичную), вместо этого десятичный ответ полностью ошибочен. Что я упустил?Ошибка округления при группировании по нескольким категориям

csv<-csv%>%group_by(id_num)%>%group_by(Month)%>%group_by(Day)%>%mutate(SE_daily=mean(SelfEsteem, na.rm=T)) 
head(csv[,c(1:5,28,181)]) 
> head(csv[,c(1:5,28,181)]) 
Source: local data frame [6 x 7] 
Groups: Day [3] 

    X.1  X id_num Month Day SelfEsteem SE_daily 
    <int> <int> <int> <int> <int>  <int> <dbl> 
1  1  1  29  2 19   4 3.457944 #mean(4,4,3)= 4, expected answer= 3.66666666667 
2  2  2  29  2 19   4 3.457944 
3  3  3  29  2 19   3 3.457944 
4  4  4  29  2 20   4 3.424242 #expected answer= 4 
5  5  5  29  2 21   4 3.318182 #expected answer=4 
6  6  6  29  2 21   4 3.318182 

глава вывода CSV:

structure(list(X.1 = 1:6, X = 1:6, 
    id_num = c(29L, 29L, 29L, 29L, 29L, 29L), 
    Month = c(2L, 2L, 2L, 2L, 2L, 2L), 
    Day = c(19L, 19L, 19L, 20L, 21L, 21L), 
    SelfEsteem = c(4L, 4L, 3L, 4L, 4L, 4L), 
    SE_daily = c(3.45794392523365, 3.45794392523365, 3.45794392523365, 3.42424242424242, 3.31818181818182, 3.31818181818182)), 
    .Names = c("X.1", "X", "id_num", "Month", "Day", "SelfEsteem", "SE_daily"), 
    row.names = c(NA, -6L), 
    class = "data.frame") 
+0

Не могли бы вы перепечатывать на 'dput' структуры возникает ошибка в его нынешнем виде' ошибка в структуре (список (Х.1 = 1: 6, X = 1: 6, ID_NUM = с (29L, 29L, 29L,: объект 'День' не найден' – OdeToMyFiddle

+0

Чем ks для этого. Не знаю, почему результат был неправильным .... Я сделал 'dput (head (csv))' изначально. Мне пришлось преобразовать его в data.frame, а затем снова запустить его – Rilcon42

+1

Я получаю ожидаемый ответ (не-окруженное среднее каждого «дня»), когда я запускаю свой код в примере данных, который вы предоставили. Также конечный результат 'group_by (id_num)%>% group_by (Month)%>% group_by (Day)' должен группироваться только по 'Day', так как каждая' group_by' переопределяет предыдущую. Если вы хотите группировать все три столбца, выполните 'group_by (id_num, Month, Day)'. – eipi10

ответ

2

Я получил ожидаемый выход для SE_daily. Вполне возможно, что по конвейеру group_by команды вместо того, чтобы положить их в одну команду, вы смотрите на нескольких id_num и Months, которые имеют общий Day (при условии, что представленная структура данных является лишь частью всего набора данных)

library(dplyr) 
csv %>% 
    group_by(id_num, Month, Day) %>% 
    mutate(SE_daily=mean(SelfEsteem, na.rm=TRUE)) 

выход

Source: local data frame [6 x 7] 
Groups: id_num, Month, Day [3] 

    X.1  X id_num Month Day SelfEsteem SE_daily 
    <int> <int> <int> <int> <int>  <int> <dbl> 
1  1  1  29  2 19   4 3.666667 
2  2  2  29  2 19   4 3.666667 
3  3  3  29  2 19   3 3.666667 
4  4  4  29  2 20   4 4.000000 
5  5  5  29  2 21   4 4.000000 
6  6  6  29  2 21   4 4.000000