R:比较两个表中的列是否缺少值,并在新列中生成True False



我有想要比较的电子邮件数据。为了收集数据,我必须从不同的表中提取发送、交付、打开等,所以我基本上有5个信息相同的数据帧,但发送表中有100%的用户ID。传递、打开等表包含完全相同的变量/列,但行数越来越少,因为不是每个收到电子邮件的人都打开、点击等。

我想做的是将所有这些合并到发送的数据框中,创建一个新的列,通过比较user ID是否存在于后续表中,为每个用户指定一个Y/N,说明该用户是否收到了电子邮件、打开了电子邮件、单击了电子邮件。所以有点像半联接,但我只想在第一个表中创建一个新列,说明其他表中是否存在每个唯一的USER ID。举个简单的例子,我有下面两个表的第一列。

Sent       USER ID  1  3  17  26  35  124
Deliv?   Y  N  Y   N   Y   Y
Delivered  USER ID  1  17  35  124

尝试使用匹配突变,然后使用ifelse,但到目前为止还没有骰子。

谢谢!

尝试以下操作。

x <- scan(text = "1  3  17  26  35  124")
y <- scan(text = "1  17  35  124")
z <- factor(x %in% y, labels = c("N", "Y"))
z
#[1] Y N Y N Y Y
#Levels: N Y

当然,变量的名称会有所不同。但方法是这样的。

编辑
如果您不想要类factor的结果,这里还有另一种方法。

z2 <- c("N", "Y")[(x %in% y) + 1L]
z2
#[1] "Y" "N" "Y" "N" "Y" "Y"

EDIT 2.
请注意,可以通过多种方式将逻辑值转换为二进制整数,而不是TRUE/FALSE。更可读的方法是使用as.integer

z <- factor(as.integer(x %in% y), labels = c("N", "Y"))

[另外两种方法是破解,加零或乘一:(x %in% y) + 0L(x %in% y)*1L。]

然后,您将在data.framesent中创建一个新列,结果如下。

sent$Deliv <- z    # or z2

或者更简单的是,不要创建中间变量z(或z2)并直接分配factor(...)

sent$Deliv <- factor(as.integer(x %in% y), labels = c("N", "Y"))

相关内容

  • 没有找到相关文章

最新更新