首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中追加数据集

在R中追加数据集
EN

Stack Overflow用户
提问于 2012-09-23 13:13:01
回答 4查看 5.3K关注 0票数 1

我有两个数据集:

Data1:

代码语言:javascript
复制
Var1 Var2   Var3    Var4
10    10      2   3
9      2      8   3
6      4      4   8
7      3     10   8

Data2:

代码语言:javascript
复制
Var1 Var5   Var3    Var6
  3    6      6   4
  1    2      5   1
  9    2      2   9
  2    6      3   2

现在我想附加这两个数据集

最终数据:

代码语言:javascript
复制
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个)数据集。程序是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-25 17:31:33

代码语言:javascript
复制
# 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()

使用apply循环的版本(不受重绑定放缓的影响):

代码语言:javascript
复制
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)
 }
票数 1
EN

Stack Overflow用户

发布于 2012-09-23 17:07:39

我推荐rbind.fill包的函数plyr

代码语言:javascript
复制
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

这种技术的主要优点是它不仅限于两个数据帧,而且允许组合任意数量的数据帧。

如果仍然需要从磁盘读取数据,则可以执行以下操作:

代码语言:javascript
复制
file_list = list.files()
data_list = lapply(file_list, read.table)
data_combined = do.call("rbind.fill", data_list)
票数 7
EN

Stack Overflow用户

发布于 2012-09-23 13:47:46

代码语言:javascript
复制
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

编辑:将多个帧合并为详细的here的方法。

组合2帧以上

代码语言:javascript
复制
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的很好的包。

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12552627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档