繁体   English   中英

有没有办法在数据框中创建一列,条件是连接不从另一个文件中引入该列,因为它有 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 

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

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

编辑:

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

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

通过计算check_error文件的行数找到了一个简单的解决方案,如果结果为 0,则在客户端中创建列。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM