Цикл For в R не может получить количество строк в фрейме данных

#r #loops #dataframe #for-loop

#r #циклы #фрейм данных #цикл for

Вопрос:

Я пытаюсь использовать цикл for в R, чтобы получить количество строк в фреймах данных.

 year1<-c("2001","2002","2003")
countries1<-c("Canada","USA","Mexico")
color1<-c("black","red","blue")

year2<-c("2010","2011","2012")
countries2<-c("France","Germany","Japan")
color2<-c("white","yellow","green")

df1<-data.frame(year1,countries1,color1)
df2<-data.frame(year2,countries2,color2)

for (i in c(df1,df2))
{
nb<-nrow(i)
print(nb)
}
  

Я ожидаю получить 3 и 3 (поскольку каждый фрейм данных содержит 3 строки), но вместо этого я получаю 6 «NULL». Вы можете мне помочь?

Ответ №1:

Мы можем поместить его в list , перебирать list и print количество строк

 for(dat in list(df1, df2)) {nb <- nrow(dat); print(nb)}
#[1] 3
#[1] 3
  

Проблема с concatenation ( c ) заключается unclass data.frame в том, что он использует и преобразует его в list of vector . Поскольку в data.frame по 3 столбца, это будет число list из length 6 (т. Е. 6 векторов)

 str(c(df1, df2))
#List of 6
# $ year1     : Factor w/ 3 levels "2001","2002",..: 1 2 3
# $ countries1: Factor w/ 3 levels "Canada","Mexico",..: 1 3 2
# $ color1    : Factor w/ 3 levels "black","blue",..: 1 3 2
# $ year2     : Factor w/ 3 levels "2010","2011",..: 1 2 3
# $ countries2: Factor w/ 3 levels "France","Germany",..: 1 2 3
# $ color2    : Factor w/ 3 levels "green","white",..: 2 3 1