我想创建一个基于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
我现在正在制作一个麻烦的循环,但我想知道申请系列中是否有一种简单的方法?
答案 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))