基于两个数据框创建Dataframe

时间:2018-02-20 17:35:45

标签: r dataframe merge

我想创建一个基于2个现有数据帧的数据帧,这些数据帧基于虚拟数据提取值(这对于两者都是通用的),特别是如果虚拟数据为1,则从数据帧a中提取,如果虚拟数据是0,然后从数据帧b)中提取。这就是他们的样子:

一个:

var1   var2    var3   dummy
ax1     ay1    az1    1
ax2     ay2    az1    0
ax3     ay3    az1    1

B:

var1   var2    var3   dummy
bx1     by1    bz1    1
bx2     by2    bz1    0
bx3     by3    bz1    1

我的目标是获得一个基于虚拟对象提取的新数据框:

C:

var1   var2    var3   dummy
ax1     ay1    az1    1
bx2     by2    bz1    0
ax3     ay3    az1    1

我现在正在制作一个麻烦的循环,但我想知道申请系列中是否有一种简单的方法?

2 个答案:

答案 0 :(得分:2)

嗯,我只想使用带条件的简单rbind:

new_df <- rbind(a[a$dummy == 1,], b[b$dummy == 0,])

应输出:

var1   var2    var3   dummy
ax1     ay1    az1    1
bx2     by2    bz1    0
ax3     ay3    az1    1

作为旁注,你很少需要在R中使用循环。如果使用循环,则有一种更好的,更R的方法来做事。

答案 1 :(得分:2)

尝试此子集策略。

sa <- as.logical(a$dummy) # use this to subset a
sb <- as.logical(1 - a$dummy) # and this to subset b
c <- rbind(a[sa, ], b[sb, ])
# Output
#  var1 var2 var3 dummy
#1  ax1  ay1  az1     1
#3  ax3  ay3  az1     1
#2  bx2  by2  bz1     0

# Data
a <- structure(list(var1 = c("ax1", "ax2", "ax3"), var2 = c("ay1", 
"ay2", "ay3"), var3 = c("az1", "az1", "az1"), dummy = c(1, 0, 
1)), .Names = c("var1", "var2", "var3", "dummy"), class = "data.frame", row.names = c(NA, 
-3L))
b <- structure(list(var1 = c("bx1", "bx2", "bx3"), var2 = c("by1", 
"by2", "by3"), var3 = c("bz1", "bz1", "bz1"), dummy = c(1, 0, 
1)), .Names = c("var1", "var2", "var3", "dummy"), class = "data.frame", row.names = c(NA, 
-3L))