#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