2015-06-22 6 views
0

При использовании пакета plyr для суммирования моих данных кажется невозможным использовать функцию nlevels().R - ddply суммировать с помощью nlevels() не работает

Структура моего набора данных выглядит следующим образом:

>aer <- read.xlsx("XXXX.xlsx", sheetIndex=1) 
>aer$ID <- as.factor(aer$ID) 
>aer$description <- as.factor(aer$description)  
>head(aer) 

    ID SOC start  end   days count severity relation 
1 1 410 2015-04-21 2015-04-28 7  1  1  3 
2 1 500 2015-01-30 2015-05-04 94  1  1  3 
3 1 600 2014-11-25 2014-11-29 4  1  1  3 
4 1 600 2015-01-02 2015-01-07 5  1  1  3 
5 1 600 2015-01-26 2015-03-02 35  1  1  3 
6 1 600 2015-04-14 2015-04-17 3  1  1  3 

> dput(head(aer,4)) 
structure(list(ID = structure(c(1L, 1L, 1L, 1L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "12", "13", "14", 
"15"), class = "factor"), SOC = c(410, 500, 600, 600), 
start = structure(c(16546, 16465, 16399, 16437), class = "Date"), 
end = structure(c(16553, 16559, 16403, 16442), class = "Date"), 
days = c(7, 94, 4, 5), count = c(1, 1, 1, 1), severity = c(1, 
1, 1, 1), relation = c(3, 3, 3, 3)), .Names = c("ID", "SOC", 
"description", "start", "end", "days", "count", "severity", "relation" 
), row.names = c(NA, 4L), class = "data.frame") 

То, что я хотел бы знать, сколько уровней существует в «ИД» переменной в разделах данных, созданной при разделении набора данных с помощью переменная «SOC». Я хочу обобщить эту информацию вместе с некоторыми другими переменными в новом наборе данных. Поэтому я хотел бы использовать пакет plyr как так:

summaer2 <- ddply(aer, c("SOC"), summarise, 
    participants = nlevels(ID), 
    events   = sum(count), 
    min_duration = min(days), 
    max_duration = max(days), 
    max_severity = max(severity)) 

Это возвращает следующее сообщение об ошибке:

Error in Summary.factor(c(4L, 5L, 11L, 11L, 14L, 14L), na.rm = FALSE) : 
‘max’ not meaningful for factors 

Может кто-нибудь дать мне совет о том, как достичь своей цели? Или что я делаю неправильно?

Большое спасибо заранее!

+0

Вы уверены, что 'NLEVELS()' это проблема? Похоже, он жалуется на 'max()', вы уверены, что 'days' и' severity' являются числовыми? Вы должны поделиться своими входными данными в [воспроизводимом формате] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) (то есть 'dput()') поэтому мы можем видеть, как вы ввели ваши данные. – MrFlick

+0

@MrFlick Я заменил nlevels() на length(), тогда он отлично работает. (Но я не получаю свои уровни, просто длина разделов данных .... :)) – RmyjuloR

+0

@Veerendra Gadekar 'max (levels (ID)' дает мне то же число для каждого раздела данных, что неверно – RmyjuloR

ответ

0

Update:

Подставив nlevels(ID) с length(unique(ID)) кажется, дает мне желаемый результат:

> head(summaer2) 
    SOC participants events min_duration max_duration max_severity 
1 100   4  7   1   62   2 
2 410   9  16   1   41   2 
3 431   2  2   109   132   1 
4 500   5  9   23   125   2 
5 600   8  19   1   35   1 
6 1040   1  1   98   98   2