繁体   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