在R中的列上使用gsub
我在R中有一个数据框(data),有数千行和10列。 其中9列包含多个级别的因子 这是数据帧的一小部分 gr1 10303.90 11 304.1 12303.6 13 303.90 obs 14303.90k 例如,一个系数的等级为“303.90”,另一个等级为“303.90 obs”。我想把“303.90 obs”改为“303.90”。 我正在使用以下命令编辑标高的名称在R中的列上使用gsub,r,gsub,R,Gsub,我在R中有一个数据框(data),有数千行和10列。 其中9列包含多个级别的因子 这是数据帧的一小部分 gr1 10303.90 11 304.1 12303.6 13 303.90 obs 14303.90k 例如,一个系数的等级为“303.90”,另一个等级为“303.90 obs”。我想把“303.90 obs”改为“303.90”。 我正在使用以下命令编辑标高的名称 data[] = as.data.frame(lapply(data, function(x) {x = gsub("30
data[] = as.data.frame(lapply(data, function(x) {x = gsub("303.90 obs","303.90", fixed = T, x)}))
但这并没有将“303.90 obs”级别更改为“303.90”。它只是保持不变。
此命令仍然适用于其他字符串,例如“303.9”更改为“303.90”
当我使用:
data[] = as.data.frame(lapply(data, function(x) {x = gsub("303.9 obs","303.90", fixed = T, x)}))
有什么建议可以解释为什么会这样吗?我对Lappy不太熟悉,因此我的解决方案只是在数据帧的列上循环。这是应该的
col1 <- 1:10
col2 <- 21:30
col3 <- c("503.90", "303.90 obs", "803.90sfsdf sf", "203.90 obs", "303.90", "103.90 obs", "303.90", "403.90 obs", "803.90sfsdf sf", "303.90 obs")
col4 <- c("303.90", "303.90 obs", "303.90", "203.90 obs", "303.90", "107.40fghfg", "303.90", "303.90 obs", "303.90", "303.90 obs")
data <- data.frame(col1, col2, col3, col4)
data$col3 <- as.factor(data$col3)
data$col4 <- as.factor(data$col4)
for(i in 3:4) {
matchedExpression = regexpr(pattern = "\\d+\\.\\d+", text = data[,i])
data[,i] = regmatches(x = data[,i], m = matchedExpression)
data[,i] <- as.factor(data[,i])
}
col1首先,从lappy
中删除x=
。其次,请提供一个小样本数据:因此您还希望将303.90k
更改为303.90
?然后你需要正则表达式。我想我的代码可能会替换“303.90 obs”中的“303.90”部分,但仍然会打印字符串的其余部分。是这样吗?是的。303.90k也应更改。我将尝试使用正则表达式,但我认为gsub无论如何都应该适用于这个示例。在转到正则表达式之前,需要找出它不起作用的原因。@gwarr:我更新了脚本。请检查这是否有效。这种方法对我无效。“303.90 obs”未更改为“303.90”。当您复制并粘贴脚本并执行它时,您将看到它工作正常。如果我的代码在您的数据帧上不起作用,您就没有提供足够的信息。看见