有没有一种方法可以在数据框中创建一个列,该列以连接为条件,而不是从另一个文件中获取该列,因为它有 0 行?

Is there a way to create a column in a data frame conditioned to a join not bringing this column from another file because it had 0 rows?

我必须加入 2 个数据框(clientscheck_error),其中左边的第二个加入(check_error) 将为所有行带来一个值为“1”的列。

然后,在联接之后,如果此列(示例中的 error201)为 NA,我将分配值“0”。如果不是,则值为“1”(这是它的原始值)。

check_error<- anti_join(sclients,sproducts, by= c("cod_pro"), na_matches = "never")

check_error$error201 <- "1"

clients<-  left_join(clients, check_error, by= c("cod_pro"), na_matches = "never")
clients$erro201 <- ifelse(is.na(clients$error201), "0", "1")

但是当我使用反连接创建数据框 check_error 时,我得到了 0 行。

因此,当我将值“1”分配给 check_error$error201 时,我收到以下错误消息:

Error in `$<-.data.frame`(`*tmp*`, error201, value = "1") : 
  replacement has 1 row, data has 0

因此,示例末尾的 ifelse 也会导致错误消息,类似于上面的消息:

Error in `$<-.data.frame`(`*tmp*`, error201, value = logical(0)) : 
  replacement has 0 rows, data has 128083 

所以我得到了我的标题问题:如果左连接“失败”,我是否可以创建 clients$error201 因为 check_error 有 0 行?

抱歉,如果问题没有得到适当的阐述。英语不是我的母语。 提前感谢所有花时间阅读本文的人。

编辑:

发布问题后,想了一个可能的解决方案。 也许在连接之前在数据框客户端上创建列,分配“0”。这样,当我进行连接时,我会有 error201.x 和 error201.y。 当连接“失败”时,因为结果是零行,我会留下分配有“0”的列。 这是正确的吗?

编辑 2: 关于 EDIT 1,在这种情况下,从未创建 error201.x,因为 y 文件中没有 error201(因为它有0 行)。 :(

通过计算 check_error 文件的行数找到了一个简单的解决方案,在 clients 中创建列,如果结果是 0.

现在我明白了,这个问题听起来很愚蠢。

if (nrow(check_error) == 0){
    clients$error201 <- "0"
}