有没有一种方法可以在数据框中创建一个列,该列以连接为条件,而不是从另一个文件中获取该列,因为它有 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 个数据框(clients 和 check_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"
}
我必须加入 2 个数据框(clients 和 check_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"
}