1

私は2つのデータセットを持っています:

データ1:

Var1 Var2   Var3    Var4
10    10      2   3
9      2      8   3
6      4      4   8
7      3     10   8

データ 2:

Var1 Var5   Var3    Var6
  3    6      6   4
  1    2      5   1
  9    2      2   9
  2    6      3   2

今、この2つのデータセットを追加したい

最終データ:

Var1  Var2    Var3  Var4  Var5 Var6
10      10       2     3        
9        2       8     3        
6        4       4     8        
7        3      10     8        
3                      4     6    6
1                      1     2    5
9                      9     2    2
2                      2     6    3

rbind を使用してこのデータセットを作成することはできません。このデータセットを作成する方法を教えてください。また、複数 (2 つ以上) のデータセットを追加したいとします。手続きは?

4

4 に答える 4

7

パッケージの機能rbind.fillをお勧めします:plyr

library(plyr)
rbind.fill(Data1, Data2)

#  Var1 Var2 Var3 Var4 Var5 Var6
#1   10   10    2    3   NA   NA
#2    9    2    8    3   NA   NA
#3    6    4    4    8   NA   NA
#4    7    3   10    8   NA   NA
#5    3   NA    6   NA    6    4
#6    1   NA    5   NA    2    1
#7    9   NA    2   NA    2    9
#8    2   NA    3   NA    6    2

この手法の主な利点は、2 つのデータ フレームに限定されず、任意の数のデータ フレームを結合できることです。

それでもディスクからデータを読み取る必要がある場合は、次のようにすることができます。

file_list = list.files()
data_list = lapply(file_list, read.table)
data_combined = do.call("rbind.fill", data_list)
于 2012-09-23T17:07:39.560 に答える
5
merge(Data1, Data2, all=TRUE, sort=FALSE)

  Var1 Var3 Var2 Var4 Var5 Var6
1   10    2   10    3   NA   NA
2    9    8    2    3   NA   NA
3    6    4    4    8   NA   NA
4    7   10    3    8   NA   NA
5    3    6   NA   NA    6    4
6    1    5   NA   NA    2    1
7    9    2   NA   NA    2    9
8    2    3   NA   NA    6    2

編集: 複数のフレームを結合する方法 詳細はこちら.

2 つ以上のフレームを組み合わせる

Data3

  Var1 Var3 Var5 Var6
1    2    6    4    1
2   10    1    6    1
3    1    6    3    1
4    9    5    5    7

データをリストに入れ、 と呼ばれる素敵なパッケージを使用する必要がありますreshape

datalist <- list(Data1, Data2, Data3)
library(reshape)

merge_recurse(datalist)
   Var1 Var3 Var2 Var4 Var5 Var6
1    10    2   10    3   NA   NA
2     9    8    2    3   NA   NA
3     6    4    4    8   NA   NA
4     7   10    3    8   NA   NA
5     3    6   NA   NA    6    4
6     1    5   NA   NA    2    1
7     9    2   NA   NA    2    9
8     2    3   NA   NA    6    2
9     2    6   NA   NA    4    1
10   10    1   NA   NA    6    1
11    1    6   NA   NA    3    1
12    9    5   NA   NA    5    7
于 2012-09-23T13:47:46.610 に答える
1
# Open a new directory and keep only the data files to be combined
combinedfiles <- function(){
  # nullVar: Creating a Null Variable using as.null function
    nullVar <- function(x){ 
    x <- getwd(); 
    x <- as.null(x); 
    }

  # readTab: Read file using read.table function
    readTab <- function(y) { 
    read.table(y, header=TRUE, sep = " ") 
    }

    objectcontent <- nullVar(x);    

    for (i in 1:length(list.files(getwd()))) {
    y <- list.files(getwd())[i];
    objectcontent <- rbind(objectcontent, readTab(y));
    i <- i + 1
    }
  return(objectcontent)
}

#Then type the following in the console
  combinedfiles()

適用ループを使用するバージョン (rbind の速度低下の影響を受けない):

combined_files = function(file_path, extension = "csv") {
   require(plyr)
   file_list = list.files(file_path, pattern = extension)
   data_list = lapply(file_list, read.table, header = TRUE, sep = " ")
   combined_data = do.call("rbind.fill", data_list)
   return(combined_data)
 }
于 2012-09-25T17:31:33.547 に答える
0

これを試して:

data1 <- as.data.frame(read.table("data1", header=TRUE, sep=" "))
data2 <- as.data.frame(read.table("data2", header=TRUE, sep=" "))
merge(data1, data2, all=TRUE, all.x=TRUE, all.Y=TRUE)
于 2012-09-23T14:27:15.733 に答える