2016-08-05 6 views
1

いくつかのデータフレームが空であるかどうかをチェックし、空であれば値を割り当てます。これには次のコードを使用しますlapplyを使用して複数のデータフレームを操作するR

a = data.frame() 
b = data.frame() 

x = list(a, b) 

cc = lapply(x, function(x) 
     if(is.data.frame(x) && nrow(x)==0){ 
      x= data.frame("11111") 
     }) 

ただし、これはリストになります。データフレームをリストに入れないでこの操作を行う方法があるかどうかを知りたい

+3

、それを維持する方が良いです'リスト' – akrun

答えて

0

akrunと同様、xが空でない場合に備えてelse-branchを返す必要がありますコードが常に空になります。それ以外の場合は、データに常に特定の列がある場合は、適切な空のdata.frameも準備します。これは、表記法で列を準備することによって使用されるコードです。数値(0)、文字(0)、整数(0)などがあります。あなたの空data.framesが一貫している場合

emptyframe = data.frame(num = numeric(0), name = character(0)) 

a = emptyframe 
b = data.frame(num = 1:2, name = paste("ID", 1:2)) 
c = data.frame(num = 6:8, name = paste("ID", 6:8)) 
d = emptyframe 

x = list(a, b, c, d) 

combined = lapply(x, function(x){ 
    if(is.data.frame(x) && nrow(x)==0){ 
     # Creating an empty data frame you'd preferably want to know before-hand what kind of variables you will have 
     emptyframe 
    }else{ # I would also cast it data.frame before returning, as it may have just failed cause of is.data.frame == FALSE 
     as.data.frame(x) 
    } 
}) 

combined 

#> combined 
#[[1]] 
#[1] num name 
#<0 rows> (or 0-length row.names) 
# 
#[[2]] 
# num name 
#1 1 ID 1 
#2 2 ID 2 
# 
#[[3]] 
# num name 
#1 6 ID 6 
#2 7 ID 7 
#3 8 ID 8 
# 
#[[4]] 
#[1] num name 
#<0 rows> (or 0-length row.names) 

、あなたはその後、彼らは規則的であると考えられているとして、上記の手法を用いてdata.framesで行うことができますきちんとしたものがたくさんあります。例えば、一つの大きなdata.frameに行結合それらを考慮:あなたはまた、複数のdata.framesがある場合は、 `else`は「x」を返すために持っている必要があり

do.call("rbind", combined) 

#> do.call("rbind", combined) 
# num name 
#1 1 ID 1 
#2 2 ID 2 
#3 6 ID 6 
#4 7 ID 7 
#5 8 ID 8  
関連する問題