Что не так с tapply (аргументы неравной длины) в этом случае?

Данные взяты оттуда http://open.canada.ca/data/en/dataset/b52664cf-bfd9-49ad-849a-cb88c92553b9 (английская версия)

 glacier <- read.csv("glacier.csv", stringsAsFactors = F)
 str(glacier)
'data.frame':   518 obs. of  6 variables:
 $ Ref_Date  : int  1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 ...
 $ GEO       : chr  "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" ...
 $ MEASURE   : chr  "Annual mass balance" "Annual mass balance" "Annual mass balance" "Annual mass balance" ...
 $ Vector    : chr  "v54326054" "v54326054" "v54326054" "v54326054" ...
 $ Coordinate: num  1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 ...
 $ Value     : chr  "-1460.0" "-780.0" "-2730.0" "-940.0" ...

tapply(X = as.numeric(glacier[glacier$MEASURE == "Annual mass balance", c("Value")]), 
                      INDEX = unique(glacier[ , 2]), FUN = median, na.rm = T)

выдает ошибку: Ошибка в tapply(as.numeric(glacier[glacier$MEASURE == "Годовой баланс массы", : аргументы должны иметь одинаковую структуру Я проверил аргументы, и они кажутся вполне нормальными для функции tapply. Понятия не имею, что не так . Заранее спасибо.

РЕДАКТИРОВАТЬ:

tapply(X = as.numeric(glacier[glacier$MEASURE == "Annual mass balance", c("Value")]), 
                      INDEX = glacier[ , 2], FUN = median, na.rm = T)

выдает ту же ошибку


person Dmitry Malugin    schedule 14.09.2016    source источник
comment
Что говорит сообщение об ошибке на русском (?)?   -  person jochen    schedule 14.09.2016
comment
INDEX должен иметь ту же длину, что и X в tapply. Поэтому попробуйте удалить unique.   -  person aosmith    schedule 14.09.2016
comment
Я перевел это в заголовке, аргументы неравной длины   -  person Dmitry Malugin    schedule 14.09.2016
comment
Это было первое, что я сделал, выдает ту же ошибку   -  person Dmitry Malugin    schedule 14.09.2016
comment
Большое спасибо, вы даете мне представление о том, что происходит. Я не подустанавливал значение индекса. Сделай это ответом, я приму это!   -  person Dmitry Malugin    schedule 14.09.2016


Ответы (1)


Вы пытаетесь создать подмножество фрейма данных ледника, и я ожидаю, что один или несколько элементов в glacier$Measure !="Annual mass balance". Таким образом, длина столбца glacier[glacier$MEASURE == "Annual mass balance", c("Value")] не равна длине: glacier[ , 2]. Если это правда, вам также потребуется подмножество индекса.

Вот решение с созданием подмножества ваших данных для улучшения читабельности:

glacier <- read.csv("01530102-eng.csv", stringsAsFactors = F)

glacierreduced<-glacier[glacier$MEASURE == "Annual mass balance",]
tapply(X = as.numeric(glacierreduced$Value),  INDEX = glacierreduced[ , 2],  
       FUN = median, na.rm = T)
person Dave2e    schedule 14.09.2016