簡體   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