[英]In R, how can I replace the values in one column with the values of another column whenever the replacing column is not empty?
[英]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.