用 R 中不同类型的元素替换数据框中的不等式
Replace inequalities in a dataframe with different types of elements in R
我有一个涉及多个列的数据框,其中有许多存在不平等的情况。我想要的是一个 R 脚本,它将识别这些不等式并将它们替换为实际值。更具体地说,假设我们有 "<2"
,我们想用它的一半值 ("<2" -> 1.0)
替换它。有没有一种通用的方法可以做到这一点,这样我就不需要手动查找数据框中的所有不等式并替换它们?
一个简单的例子可能如下:
Col1,Col2, Col3, Col4
3.4, RHO_1, <5, NA
2, RHO_2, 5, 1.3
我想得到这样的东西:
Col1,Col2,Col3,Col4
3.4, RHO_1, 2.5, NA
2, RHO_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))))
我有一个涉及多个列的数据框,其中有许多存在不平等的情况。我想要的是一个 R 脚本,它将识别这些不等式并将它们替换为实际值。更具体地说,假设我们有 "<2"
,我们想用它的一半值 ("<2" -> 1.0)
替换它。有没有一种通用的方法可以做到这一点,这样我就不需要手动查找数据框中的所有不等式并替换它们?
一个简单的例子可能如下:
Col1,Col2, Col3, Col4
3.4, RHO_1, <5, NA
2, RHO_2, 5, 1.3
我想得到这样的东西:
Col1,Col2,Col3,Col4
3.4, RHO_1, 2.5, NA
2, RHO_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))))