Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的列上使用gsub_R_Gsub - Fatal编程技术网

在R中的列上使用gsub

在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

我在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("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”。当您复制并粘贴脚本并执行它时,您将看到它工作正常。如果我的代码在您的数据帧上不起作用,您就没有提供足够的信息。看见