Группировать по data.table используя сумму - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть фрейм данных, который я хочу сгруппировать по пользователям и найти сумму количества.

library(data.table)
x = read.table('C:/Users/user/Desktop/20180911_Dataset_b.csv',encoding = 'UTF-8',sep =',')

dt = data.table(x)

colnames(dt)
"dates_d" "user" "proj" "quantity"   

столбец quantity выглядит так:

quantity
1
34
12
13
3
12
-
11
1

Я слышал, чтоdata.table library очень быстро, поэтому я хотел бы использовать это.

Я сделал это в Python, но не знаю, как это сделать в R.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Из-за исторических проблем с ограничением памяти R считывает данные как факторы.Когда в столбце есть символьная запись, весь столбец читается как символьный вектор.Теперь, когда оперативная память стала более доступной, вы можете просто сначала прочитать данные в виде строки, чтобы они оставались в виде вектора символов, а не фактора.

Затем используйте as.numeric для преобразования в вещественное число перед суммированием.Строки, которые нельзя преобразовать в числа, вместо этого преобразуются в NA.na.rm=TRUE игнорирует NA в сумме.

Принимая все вышеперечисленное:

library(data.table)
#you might want to check out the data.table::fread function to read the data directly as a data.table
x = read.table('C:/Users/user/Desktop/20180911_Dataset_b.csv',encoding = 'UTF-8',sep =',', stringsAsFactors=FALSE)

setDT(x)[, sum(as.numeric(quantity), na.rm=TRUE), by=.(user)]

Ссылка: полезный комментарий от phiver в Есть ли веская причина длястолбцы будут символами, а не факторами? ссылка на блог Роджера Пенга: https://simplystatistics.org/2015/07/24/stringsasfactors-an-unauthorized-biography/

0 голосов
/ 13 сентября 2018
library(dplyr)

dt[dt == "-" ] = NA

df <- dt %>% group_by(user) %>%
        summarise(qty = sum(!is.na(quantity)))
...