标签: rbind

使 rbindlist 跳过、忽略或更改列的类属性

我想合并一大组数据框(大约 30 个),每个数据框有大约 200 个变量。这些数据集非常相似但不完全相同。

请在下面找到两个示例数据框:

library(data.table)
library(haven)
df1 <- fread(
    "A   B   C  iso   year   
     0   B   1  NLD   2009   
     1   A   2  NLD   2009   
     0   Y   3  AUS   2011   
     1   Q   4  AUS   2011   
     0   NA  7  NLD   2008   
     1   0   1  NLD   2008   
     0   1   3  AUS   2012",
  header = TRUE
)
df2 <- fread(
    "A   B   D  E  iso   year   
     0   1   1  NA ECU   2009   
     1   0   2  0  ECU   2009   
     0   0   3  0 …
Run Code Online (Sandbox Code Playgroud)

merge r class rbind rbindlist

6
推荐指数
1
解决办法
3761
查看次数

将行附加到 data.table 与在 data.frame 中的工作方式不同:如何以及为什么?

为什么下面的代码不起作用?

library(data.table)
team_table <- as.data.table(matrix(NA,ncol = 11))
rbind(team_table,1:11)
Run Code Online (Sandbox Code Playgroud)

而同版本的data.frame呢?

team_table <-as.data.frame(matrix(NA,ncol = 11))
rbind(team_table,1:11)
Run Code Online (Sandbox Code Playgroud)

r dataframe rbind data.table

6
推荐指数
1
解决办法
87
查看次数

为什么 rbind 将数字元素列表转换为字符矩阵?

为什么 rbind 将我的数字元素列表转换为字符?

> class(mymatrix.list)
[1] "list"
> class(mymatrix.list[[1]])
[1] "numeric"
> mymatrix.results = do.call(rbind, mymatrix.list)
> class(mymatrix.results)
[1] "matrix"
> class(mymatrix.results[1])
[1] "character"
Run Code Online (Sandbox Code Playgroud)

r rbind

5
推荐指数
1
解决办法
4751
查看次数

用rbind附加数据帧的神秘问题

我试图将几个文件连接成一个主文件.有5个文件具有相同的结构,我可以将每个文件单独读入数据框中,没有任何问题.我甚至手动设置200+变量的列类,而不是让R决定,因为我认为这导致了问题.但是,将任意两个文件附加在一起会导致内存不足.

警告消息:1:在rbind(deparse.level,...)中:达到4043Mb的总分配:请参阅help(memory.size)

所以我做了一些实验:我加入了两个不同的文件1块.这样可行.我加入了一大块文件2到一大块文件1.这很有效.我加入了一大块文件2到原始文件1.这是有效的.

这些文件中的每一个都在200MB以下,所以我不确定我是否应该耗尽内存.如果有人感兴趣,数据来自hearstchallenge.com.竞争已经结束,我们只是将数据用于分析实验(而不是编程!).

有关如何解决此问题的任何建议?

memory-management r append rbind

5
推荐指数
1
解决办法
691
查看次数

使用rbind合并data.tables时出错,其中一个是空的

将三个(或更多)data.tables与rbind合并时发出错误,并且两个非空data.tables之间存在空data.table:

> require(data.table)
Loading required package: data.table
data.table 1.9.2  For help type: help("data.table")

> DT <- data.table(x=c(1,2,3))
> rbind(DT, data.table(), DT)
Error in setcolorder(tt, chmatch(match.names, make.names(original.names[[x]],  (from <text>#1) : 
  Column numbers in neworder out of bounds: NA
Run Code Online (Sandbox Code Playgroud)

如果空data.table最终会发生这种情况:

> rbind(DT, DT, data.table()) 
   x
1: 1
2: 2
3: 3
4: 1
5: 2
6: 3
Run Code Online (Sandbox Code Playgroud)

但是当空的data.table在开头时会发生一些其他错误:

> rbind(data.table(), DT, DT) 
Error in data.table::.rbind.data.table(...) (from <text>#1) : 
  Some colnames of argument 2 (x) are not present in colnames of item 1. …
Run Code Online (Sandbox Code Playgroud)

r rbind data.table

5
推荐指数
1
解决办法
936
查看次数

为什么 rbind() 和 do.call(rbind, ) 返回不同的结果?

我想使用以下代码将列表转换为数据框:

ls<-list(a=c(1:4),b=c(3:6))
do.call("rbind",ls)
Run Code Online (Sandbox Code Playgroud)

添加do.call得到的结果如下图。它data.frame根据需要返回一个对象。

 do.call("rbind",ls)
  [,1] [,2] [,3] [,4]
a    1    2    3    4
b    3    4    5    6
Run Code Online (Sandbox Code Playgroud)

但是,如果我直接使用rbind,它会返回一个列表。

为什么rbind在这两种情况下表现不同?

my.df<-rbind(ls)
str(ls)


 my.df
   a         b        
ls Integer,4 Integer,4

 str(ls)
List of 2
 $ a: int [1:4] 1 2 3 4
 $ b: int [1:4] 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

r rbind do.call

5
推荐指数
1
解决办法
2万
查看次数

如何为 data.frame 子类扩展 rbind ?

我的问题是如何扩展rbind()子类data.frame?我似乎无法正确扩展rbind()以使用即使是非常简单的子类。以下示例演示了该问题:

子类和方法定义:

new_df2 <- function(x, ...)
{
  stopifnot(is.data.frame(x))
  structure(x, class = c("df2", "data.frame"), author = "some user")
}

rbind.df2 <- function(..., deparse.level = 1)
{
  NextMethod()
}
Run Code Online (Sandbox Code Playgroud)

我意识到rbind()在这种情况下扩展是不必要的,但我的宏伟计划是在我的子类上使用rbind.data.frame(),然后向其结果添加一些额外的检查/属性。

如果您调用以下命令,您会收到错误:Error in NextMethod() : generic function not specified

不起作用:

t1 <- data.frame(a = 1:12, b = month.abb)
t2 <- new_df2(t1)
rbind(t2, t2)
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用NextMethod(generic = "rbind"),但在这种情况下,您会收到此错误:Error in NextMethod(generic = "rbind") : wrong value for .Method

也不起作用:

rbind.df2 …
Run Code Online (Sandbox Code Playgroud)

generics methods r rbind r-s3

5
推荐指数
1
解决办法
248
查看次数

rbind.fill 但以 R 为基数

我正在尝试找到一种有效的(运行快速且编码简单)方法来执行该rbind.fill功能,但在基本 R 中。从我的搜索来看,似乎有很多库函数,例如smartbindbind_rowsrbindon data.table,不过,如前所述,我需要一个基础 R 的解决方案。我发现使用:

df3 <- rbind(df1, df2[, names(df1)])
Run Code Online (Sandbox Code Playgroud)

从这个问题的答案来看,但它删除了列,而我希望NA添加额外的列。

如果此方法也适用于空的data.frame和已填充的方法,那就太好了,本质上只是设置返回已填充的方法。(这是为了简单起见,但如果不可能的话,如果变量为data.frame空,则将其替换为新变量并不困难。

我还希望它通过标记相同的列的列名称进行绑定。此外,第一个数据框可以比第二个数据框更大或更小,并且两者都可以具有另一个没有的列。

这是我想要的输入和输出示例(我只是编造了一些并不重要的数字)。

#inputs
a <- data.frame(aaa=c(1, 1, 2), bbb=c(2, 3, 3), ccc=c(1, 3, 4))
b <- data.frame(aaa=c(8, 5, 4), bbb=c(1, 1, 4), ddd=c(9, 9, 9), eee=(1, 2, 4))
#desired output
aaa bbb ccc ddd eee
1   2   1   NA  NA
1   3   3   NA  NA
2   3   4   NA  NA
8 …
Run Code Online (Sandbox Code Playgroud)

r rbind

5
推荐指数
1
解决办法
4708
查看次数

r- 绑定数据帧列表的行,同时将空数据帧保留为 NA 行

我正在寻找一种方法将数据帧列表(一行或空的大约 7000 个数据帧)重新绑定到单个数据帧中,但不删除列表中的空数据帧。

\n\n
## Example of data\nl <- list(Name1 = data.frame(), \n                 Name2 = data.frame(V1 = "A", V2 = "B", stringsAsFactors = F), \n                 Name3 = data.frame(V1="B", V2= NA, V3 ="C", stringsAsFactors = F))\n\n> l\n$Name1\ndata frame with 0 columns and 0 rows\n\n$Name2\n  V1 V2\n1  A  B\n\n$Name3\n  V1 V2 V3\n1  B NA  C\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我尝试了一些 dplyr 解决方案,但它没有保留空数据框(并不奇怪,因为它没有行)

\n\n
## rbind\nlibrary(dplyr)\n\ndf <- bind_rows(l,.id = "NAME")\n\n> df\n   NAME V1   V2   V3\n1 Name2  A    B <NA>\n2 Name3  B <NA>    C\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有一种简单的方法可以得到这样的东西?

\n\n …

r list dataframe rbind dplyr

5
推荐指数
1
解决办法
2349
查看次数

R-考虑到某些被调用的数据帧可能不存在,如何合并/绑定多个数据帧?

我必须在 R 中的迭代过程中绑定/合并数据帧。有时,某些数据帧可能不存在,原因我不会在此处解释。我想知道如何绑定数据帧,即使调用一些不存在的数据帧也是如此。作为一个例子,我有这些数据框:

df.R_H <- data.frame(A=c(0,4,5,6,7),
                  B=c(3,9,4,5,8),
                  C=c(1,2,4,2,6))

df.B_C <- data.frame(A=c(0,4,5,6,7),
                  B=c(3,9,4,5,8),
                  C=c(1,2,4,2,6))

df.G_H <- data.frame(A=c(0,4,5,6,7),
                  B=c(3,9,4,5,8),
                  C=c(1,2,4,2,6))
Run Code Online (Sandbox Code Playgroud)

但是,在我的代码中我有这个:

df5 <- rbind(df.R_H,df.B_C,df.G_H,df.R_C)
df5
Run Code Online (Sandbox Code Playgroud)

df.R_C尽管数据框不存在,但如何绑定数据框?我无法单独检查哪些数据帧存在或不存在,因为我有数百种这样的情况,并且即使某些数据帧不存在,我也想自动执行此操作。

merge r rbind

5
推荐指数
1
解决办法
251
查看次数