2016-12-08 3 views
0

У меня есть много фреймов данных, таких как df1, df2, ..., df11, размеры которых составляют 20,3; 40,4 ,; 0,5; ... 0,2; эти размеры не остаются постоянными в моей программе, откуда я вычисляю свои кадры данных. Поэтому я хочу отфильтровать те кадры данных, у которых нулевые размеры строк, такие как dim (df3), дает 0,5 Это то, что я пробовалФильтрация кадра данных, размер строки которого равен нулю в R

while(!dim(df(i))[1]==0) 
{ 

    DF=paste("df",c(1:11)) 

} 

Благодаря

+0

сделать вас хотите имена не нулевых фреймов данных или вы хотите, чтобы сами кадры данных были списком? –

+0

@ joel.wilson, сами нужны сами кадры данных – Deepesh

ответ

2

Мы можем использовать Filter продержав наборы данных в опции list

Filter(function(x) nrow(x)>1, mget(paste0("df", 1:11))) 

Или другой является sapply создать логический вектор и затем подмножество list

lst <- mget(paste0("df", 1:11)) 
i1 <- sapply(lst, nrow)>0 
lst[i1] 
+1

Это сработало спасибо .............. – Deepesh

1

Это просто объяснение, где вы могли пойти не так. Вы должны быть предпочтительным for вместо while

Если вы хотите только имена непустых data.frames:

total_num_dataframes = 4 
DF =character(0) 
for (i in 1:total_num_dataframes){ 
    if (dim(get(paste0("df",i)))[1] != 0) 
    DF = c(DF,paste0("df",i)) 

} 

Если вы хотите себя data.frames:

DF = vector('list', length = total_num_dataframes) 
j = 1 
for (i in 1:total_num_dataframes){ 
    if (dim(get(paste0("df",i)))[1] != 0) { 
    DF[[j]] = get(paste0("df",i)) 
    j = j+1 
    } 

}