用 R 中不同类型的元素替换数据框中的不等式

问题描述

我有一个涉及多列的数据框,其中存在许多不等式的实例。我想要的是一个 R 脚本,它将识别这些不等式并用实际值替换它们。更具体地说,让我们假设我们有 "<2" 并且我们想用它的半值 ("<2" -> 1.0) 替换它。有没有一种通用的方法来做到这一点,这样我就不需要手动查找数据框中的所有不等式并替换它们?

一个简单的例子可能如下:

Col1,Col2,Col3,Col4 
3.4,RHO_1,<5,NA 
2,RHO_2,5,1.3

我想得到这样的东西:

Col1,2.5,1.3

当所有元素都是数值时(例如使用数值代替 RHO_1、RHO_2 和 NA),以下命令有效:

df <-  lapply(df,function(x) sapply(sub("<","0.5*",x,fixed = TRUE),function(y) eval(parse(text = y))))

但是,上述命令在存在 NA 和字符串(例如 RHO_1)时不起作用。 在使用以下命令将所有非值转换为 NA 后,我试图找到仅值元素的位置:

value_ind<- which(!is.na(as.matrix(df)),arr.ind = TRUE,useNames = TRUE) 

但是我没有成功地使用这些信息。 供您参考,实际数据框 df 由许多行和列组成。

解决方法

我已经设法解决了这个问题。我已经获得了原始数据帧的一个子集(此处命名为 dataBase2),因此它不包含字符(例如,排除 RHO_1)。简化后的数据框命名为 dataBase6。然后,我将其他符号(例如“-”、“_”等)转换为 NA,然后应用该函数。下面我给出了来自实际数据集的代码:

# names of the columns that I want to remove (contain character)
out <- c("Code-Medsal","Number","Code_National","Projection","date","Notes") 
dataBase6 <- dataBase2[,!(colnames(dataBase2) %in% out) ] 
#replace special symbols with NA
dataBase6[dataBase6=="-"] <- NA
#apply the function to the numeric values + NA
dataBase6[] <-  lapply(dataBase6,function(x) sapply(sub("<","0.55*",x,fixed = TRUE),function(y) eval(parse(text = y))))