R 基于两个数据帧创建数据帧
我想基于2个现有数据帧创建一个数据帧,该数据帧基于一个伪值(这两个伪值都是通用的)提取值,特别是如果伪值为1,则从数据帧a提取,如果伪值为0,则从数据帧b提取)。这就是它们的样子: a: b: 我的目标是获得一个新的数据帧,该数据帧基于虚拟对象进行提取,如下所示: c: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
我现在正在处理一个繁琐的循环,但我想知道在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))