1

原始df(临床化学)

Subject Code Test Value Units   Flag
1       NA    NA   147   mmol/L    
2       NA/K  NA/K 10.5  RATIO  
3       K     K    4.7   mmol/L 
4       CK    CK   235   UL
...

清洁后理想的df

Subject Code  Test             Value  Units   Flag
1       NA    Sodium           147   mmol/L   NA
2       NA/K  Sodium Potassium 10.5  RATIO    NA
3       K     Potassium        4.7   mmol/L   NA
4       CK    Creatine Kinase  235    UL      NA
...

我试过的

df <- read.csv(file="clinchemistry.csv", header = TRUE, sep=",", stringsAsFactors = FALSE)

df$df[df8$Test == "NA"] <- "Sodium"

df$df[df8$Code == "NA"] <- "Sodium"

df[is.na(lb$Code)]<-"Sodium"

lb[is.na(lb$Code)]<-"Sodium"

结果:

所有钠值都消失或出现错误:

[<-.data.frame( , is.na *tmp*(lb$Test), value = "Sodium") 中的错误:列的下标重复

有人会指导我的想法吗?

4

2 回答 2

1

利用na.strings=""

 df <- read.csv(file="clinchemistry.csv", 
     na.strings="", stringsAsFactors = FALSE)

(省略设置为其默认值的参数)

于 2020-02-04T20:25:46.273 回答
0

有很多方法可以做你想做的事,这取决于你想要什么;)

首先,我创建一个最小的示例 data.frame

df <- data.frame(Subject = 1:4,
                 Code = c(NA, "NA/K", "K", "CK"),
                 Test = c(NA, NA ,"K", "CR"))

现在,如果由于某种原因您的钠值存储为NA(缺失值,而不是字符串“NA”,您可以这样做(您确实需要一个很好的理由来替换 NA,因为在大多数情况下,这将是发明数据.但你的理由可能是一个有效的;):

# Replace missing values NA with string "Sodium"
# 
df$Code_fixed[is.na(df$Code)] <- "Sodium"

或者,如果您有一个"NA"要更改“钠”的字符串

# Replace string "NA" with string "Sodium"
# 
df$Code_fixed[df$Code == "NA"] <- "Sodium"

或者如果您想在字符串中交换字符组合“NA”

# Replace any occurence of string "NA" with string "Sodium"
# 
df$Code_fixed <- gsub("NA", "Sodium", df$Code)

执行以上所有操作:

# First initialize vector with characters already replaced
df$Code_fixed <- gsub("NA", "Sodium", df$Code)
df$Code_fixed[is.na(df$Code_fixed)] <- "Sodium"
于 2020-02-04T20:43:52.627 回答