правильное количество наблюдений - PullRequest
0 голосов
/ 15 ноября 2018

Я запускаю некоторую статистику в R для набора данных, чтобы увидеть, есть ли какая-либо разница между группами.поэтому я сделал следующее

DATA$time <- difftime(data$endtime, data$starttime, unites ="mins")

Затем я хочу установить подмножество, чтобы получить только положительное время

DATA$time1 <- difftime(data$endtime, data$starttime, unites ="mins") [DATA$time>0 & DATAtime < 2000] 

В этот момент я получаю предупреждающее сообщение.

In `[.data.table`(x,j =`(name, value=value):

Supplied 43242 items to be assigned to 45649 items of column 'time'
(recycled leaving remainder of 2407 items).

Однако я все еще могу выполнить следующую строку кода ...

DATA[,.(numbers=sum(length(!is.na(Agegroup))), min=min(time1, na.rm =
T), mean=mean(time1, na.rm = T),max=max(time1, na.rm =
T),SEM=sd(time1, na.rm = T)/sqrt(length(time1))), by= DATA$Agegroup]

#DATA  numbers   min       mean         max      SEM 
#1: 0  42897   1 mins    609.4079 mins 1439 mins 1.500116 
#2: 4  1525    5 mins    615.8830 mins 1430 mins 8.004109 
#3: 5  286     80 mins   592.0000 mins 1430 mins 19.020898 
#4: 3  796     5 mins    629.2510 mins 1430 mins 11.013346 
#5: 7  16      225 mins  596.9231 mins 1100 mins 62.248533 
#6: 1  26      250 mins  624.1667 mins 1315 mins 63.108800 
#7: 2  16      90 mins   567.8571 mins 1050 mins 88.852221 
#8: 6  87      50 mins   651.3519 mins 1430 mins 35.799050

У меня есть два вопроса.

1) как мне получить R, чтобы вернуть числа в качестве чисел, используемых для расчета?- Когда я добавляю все числа, я получаю 45649, но я предполагаю, что я должен получить 43242?или как это работает?если нет, то какие оставшиеся 2407?и как я могу получить их из моей статистики, если они не соответствуют требованиям для моего поднабора?

2) есть ли способ, чтобы R возвращал результаты в порядке возрастной группы?сейчас заказ составляет 0,4,5,3,7,1,2,6 Я хотел бы, чтобы он был 1-7

Заранее благодарен за любую возможную помощь или руководство, чтобы помочь мне.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

По сути, произошло то, что когда вы создали свой второй вектор (DATA$time1), вы сгенерировали подмножество ваших данных, которое короче, чем другой вектор (DATA$time), который присутствует, поэтому R рециркулировал первые числа из DATA$time1заполнить оставшееся пустое векторное пространство, оставив 2407 неиспользованным из этой переработки.Это происходит потому, что у вас есть атомарные векторы.

Возможно, вам будет проще удалить переменные, которые вы не хотите хранить, чем сохранить, чем пытаться выбрать те, которые вам нужны.Трудно сказать точно, как это будет работать без минимального примера набора данных, но вам, возможно, придется привести ваши данные в матрицу или использовать функции, которые приводят данные в не векторную форму.

0 голосов
/ 15 ноября 2018

DATA$time1 <- difftime(data$endtime, data$starttime, unites ="mins") [DATA$time>0 & DATAtime < 2000] пытается присвоить слишком малый результат большему data.table.Вот что говорит сообщение об ошибке.Если вы думаете об этом, это имеет смысл, поскольку вы поднаборы основаны на некоторых критериях, но возвращаете его к тому же размеру data.table

Вы можете проверить возвращаемое значение difftime, как это в вашемconsole:

X <-  difftime(data$endtime, data$starttime, unites ="mins") [DATA$time>0 & DATAtime < 2000]
length(X)
X

Вы должны изучить использование библиотеки dplyr.Они более удобны для начинающих.

Вы можете попробовать следующее, чтобы достичь того, что вы хотите:

library(dplyr)
data %>%mutate(time = difftime(endtime, starttime, unit ="mins")) %>%
mutate(time1 = ifelse((time > 0 && time < 2000), difftime(endtime, starttime, unit ="mins"), NA)

Вы можете использовать функцию arrange для сортировки

Вот ссылка на чит-лист дляdplyr https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

...