29987


Rを使用しcsvファイルの編集をしています。

[code]

    library(dplyr)
    library(data.table)
    lf <- list.files(full.names = F, pattern="csv", recursive = FALSE)
    data <- data.frame()
     for(i in 1:len(lf)){
       add <- fread(lf[i]) %>% select(ID,hogehoge)
       data <- rbind(data,add)
     }
    
[/code]

という感じでアンケートデータの結合を行っているのですが、hogehogeのなかの質問項目が途中まではなかったのに何回目からの調査からか質問が導入されたものがありエラーで困っています。  
できれば質問されていない回の解答をNAとして統合したいのですがどのようにすればよいのでしょうか。  
すべての項目を結合（その回に存在しない項目はNA扱い）してから`select`でもかまわないです。  
よろしくお願い致します。

**追記**  
`Error in select(., hogehoge) : unused argument (hogehoge)`  
のエラーが途中で出ましたが、`dplyr`と`data.table`の`select`が競合しているためのエラーのようです。  
`dplyr::select()`とすることで解消しました。  
また、上のプログラムについては  
<http://www.housecat442.com/?p=698>  
を参考にさせていただきました。


CC BY-SA 3.0
2016-10-29T11:20:20.950
29985
2018-03-04T07:10:43.327
2018-03-04T07:10:43.327
12457
12457
question
r tidyverse
Rによる存在しない項目も含めたcsvファイルの結合


`rbind()`の代わりに`dplyr`パッケージの`bind_rows()`を用いることで解決できると思います

例

[code]

    df1 <- data.frame(a = 1:2, b = 3:4, c = 5:6)
    df2 <- data.frame(a = 7, b = 8, d = 9)
    
    library(dplyr)    
    bind_rows(df1, df2)
    #    a b  c  d
    # 1  1 3  5 NA
    # 2  2 4  6 NA
    # 3  7 8 NA  9
    
[/code]

**[EDITED]**  
実際の手順としては、以下の様な感じで最初に全て結合させてから`select()`するのがシンプル (＆おそらく高速) です

[code]

    library(dplyr)
    library(data.table)
    
    lf <- list.files(full.names = F, pattern="csv", recursive = FALSE)
    
    obj <- lapply(lf, fread) %>%      # リスト形式になるようlapply()で読み込み
      bind_rows() %>%                 # bind_rows()でリスト要素を結合
      select(ID, hoge)
    
[/code]


CC BY-SA 3.0
2016-10-29T14:54:18.240
29987
2016-11-01T02:47:02.560
2020-06-17T08:14:45.997
-1
15653
29985
answer


`data.table`の構文によるこうすれば役に立つとおもいます：

[code]

    library(data.table)
    obj = rbindlist(lapply(lf, fread, select = c("ID", "hoge")))
    
[/code]

なぜあとで除くつもり列を初めに含むか？こうしたらまず除いてから結合する。


CC BY-SA 3.0
2016-11-14T17:32:22.193
30404
2016-11-14T17:32:22.193
18598
29985
answer