Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于两个数据帧创建数据帧_R_Dataframe_Merge - Fatal编程技术网

R 基于两个数据帧创建数据帧

R 基于两个数据帧创建数据帧,r,dataframe,merge,R,Dataframe,Merge,我想基于2个现有数据帧创建一个数据帧,该数据帧基于一个伪值(这两个伪值都是通用的)提取值,特别是如果伪值为1,则从数据帧a提取,如果伪值为0,则从数据帧b提取)。这就是它们的样子: a: b: 我的目标是获得一个新的数据帧,该数据帧基于虚拟对象进行提取,如下所示: c: 我现在正在处理一个繁琐的循环,但我想知道在apply系列中是否有一种简单的方法?Hm,我只想使用一个带条件的简单rbind: new_df <- rbind(a[a$dummy == 1,], b[b$dummy == 0

我想基于2个现有数据帧创建一个数据帧,该数据帧基于一个伪值(这两个伪值都是通用的)提取值,特别是如果伪值为1,则从数据帧a提取,如果伪值为0,则从数据帧b提取)。这就是它们的样子:

a:

b:

我的目标是获得一个新的数据帧,该数据帧基于虚拟对象进行提取,如下所示:

c:


我现在正在处理一个繁琐的循环,但我想知道在apply系列中是否有一种简单的方法?

Hm,我只想使用一个带条件的简单rbind:

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

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

Hm,我将使用一个带条件的简单rbind:

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

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

试试这种子集策略

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))

sa试试这种细分策略

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))

sa注意,如果
a
b
中的值为
0
并且
b
中的值为
1
@ANG,则这对
a和
b
中的普通假人不起作用。例如,如果
a
中的值为
0
,并且
b
中的值为
1
@ANG,我相信OP想要排除您刚才描述的情况。感谢ANG考虑到该情况。leeum确实是对的,假人是常见的,即a=0和b=1在我的情况下不会发生,但感谢您在下面说明这一点。我已经把它添加到我的个人备忘中,我肯定在某个时候我会需要它。请注意,这对
a
b
中没有常见的假人不起作用。例如,如果
a
中的值是
0
,而
b
中的值是
1
@ANG,我相信OP想要排除您刚才描述的情况。感谢ANG考虑到这个情况。leeum确实是对的,假人是常见的,即a=0和b=1在我的情况下不会发生,但感谢您在下面说明这一点。我已经把它添加到我的个人备忘单上,我相信我会在某个时候需要它。
var1   var2    var3   dummy
ax1     ay1    az1    1
bx2     by2    bz1    0
ax3     ay3    az1    1
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))