2015-10-11 5 views
-2

Я написал функцию, чтобы вернуть количество ударов птиц за каждый год. Годы и количество ударов верны, но что случилось с первым столбцом моего кадра данных? и почему последняя строка поражает NA NA?Почему моя функция возвращает странный фрейм данных

flightDates <- mdy_hm(birds[,10]) 
flightYears <- as.factor(year(flightDates)) 
years <- (c(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011)) 
strikesPerYear <- function(x){ 
strikes <- c(NA, NA) 
for(i in years){ 
    countStrikes <- length(which(x == i)) 
    strikes <- data.frame(rbind(cbind("Year"=i, "NumStrikes"=as.numeric(countStrikes)), strikes)) 
} 
return(strikes) 
} 

strikesPerYear(flightYears) 

> strikesPerYear(flightYears) 
     Year NumStrikes 
1  2011  10483 
110  2010  10923 
19  2009  10741 
18  2008  8903 
17  2007  8746 
16  2006  8010 
15  2005  7804 
14  2004  7667 
13  2003  6664 
12  2002  6769 
11  2001  6287 
     2000  6407 
strikes NA   NA 
+1

То, что вы называете первым столбцом, это фактически строка.names результата data.frame, и они показывают номера строк исходного кадра данных. Последний столбец 'strikes NA NA', потому что вы используете' rbind' для строки, связывающей его (append) с удалением data.frame. – LyzandeR

+0

, но как это исправить? Я вытаскиваю даты из набора данных, а затем просто сохраняю год как «летный год». Я добавил эту информацию на вопросы –

+0

Чтобы рассказать вам, как ее исправить, вы должны сказать нам, что именно это означает. Вы точно не указали, что вы хотите получить. – joran

ответ

0

Я изменил стачки < - с (NA, NA) к забастовкам < - data.frame() и дал мне вывод данных, который я искал.

flightDates <- mdy_hm(birds[,10]) 
flightYears <- as.factor(year(flightDates)) 
years <- (c(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011)) 
strikesPerYear <- function(x){ 
strikes <- data.frame() 
for(i in years){ 
countStrikes <- length(which(x == i)) 
strikes <- data.frame(rbind(cbind("Year"=i, "NumStrikes"=as.numeric (countStrikes)), strikes)) 
} 
return(strikes) 
} 

strikesPerYear(flightYears) 
+0

, но почему это 'rbind()' там вообще? –

0

В первой колонке являются rownames выхода data.frame. Похоже, у вас был matrix в качестве ввода (который имеет rownames пронумерованный как: 1,2,3,4,5,) и каким-то образом вы преобразовали rownames в символы, или во время преобразования от matrix до data.frame они изменили класс на символы и ваш выход имеет rownames, выполненный случайным образом.

И последняя строка может быть NA, NA, как у вас есть строка в вашем fnction

strikes <- c(NA, NA) 
Смежные вопросы