簡體   English   中英

用 R 中另一列的值替換一列中的空單元格

[英]Replacing empty cells in a column with values from another column in R

我試圖將單元格值從 StudyID 列拉到空單元格 SigmaID 列,但我遇到了 output 的奇怪問題。

這是我的數據在運行命令之前的樣子。

StudyID    Gender  Region  SigmaID
LM24008      1       20    LM24008  
LM82993      1       16    LM28888  
ST04283      0       44      
ST04238      0       50      
LM04829      1       24    LM23921  
ST91124      0       89
ST29001      0       55

我嘗試通過以三種方式編寫語法來完成此操作,因為我不確定邏輯的設置方式是否存在問題。 三者都生產相同的 output。

df$SigmaID <- ifelse(test = df$SigmaID != "", yes = df$SigmaID, no = df$StudyID)

df$SigmaID <- ifelse(df$SigmaID == "", df$StudyID, df3$SigmaID)

df %>% mutate(SigmaID = ifelse(Gender == 0, df$StudyID, df$SigmaID)

Output:不是從 StudyID 列中提取值,而是填充一到四位數字。

StudyID    Gender  Region  SigmaID
LM24008      1       20    LM24008  
LM82993      1       16    LM28888  
ST04283      0       44    5  
ST04238      0       50    4908  
LM04829      1       24    LM23921
ST91124      0       89    209
ST29001      0       55    4092

我嘗試將空格重新編碼為 NA,然后在邏輯中調用 NA,但這會產生與上面相同的 output。 我想知道它是否與變量類型或變量屬性有關,以及它如何讀取 StudyID 中的字符。 非常感謝您對此問題的反饋!

這是如何做到的:

df$SigmaID[df$SigmaID == ""] = df$StudyID[df$SigmaID == ""]

df[df$SigmaID == ""]只選擇SigmaID==""的行

我還建議使用data.table而不是data.frame 它速度更快,並且有一些有用的語法特性:

library(data.table)
setDT(df) # setDT converts a data.frame to a data.table
df[SigmaID=="",SigmaId:=StudyID]

跟進這一點,事實證明。 默認 R 將字符串類型轉換為因子。 有幾種方法可以解決上述問題。

i <- sapply[df, is.factor]
df[i] <- lapply(df[i], as.character)

另一種方法:

df <- read.csv("/insert file pathway here", stringAsFactors = FALSE)

這是我發現有幫助的。 我相信還有其他解決此問題的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM