column19 <- 19
mdf[,column19] <- lapply(mdf[,column19],function(x){as.numeric(gsub(",", "", x))})
此代码段有效,但也会导致重复值
答案 0 :(得分:2)
如果只有一列,我们就不需要lapply
mdf[, column19] <- as.numeric(gsub(",", "", mdf[, column19], fixed = TRUE))
OP的代码没有按预期运行的原因是因为lapply
在将其转换为vector
(mdf[, column19]
)后的单个列上并循环遍历列的每个单个元素并返回list
。现在,我们将list
的输出分配回该单列
column19 <- 19
mdf[,column19] <- lapply(mdf[,column19],function(x) as.numeric(gsub(",", "", x)))
警告讯息:在
[<-.data.frame
(*tmp*
,,第19栏,值= list(27,49,510,:提供了5个变量来替换1个变量
相反,如果我们想要使用相同的过程,请按data.frame
或mdf[column19]
保留mdf[, column19, drop = FALSE]
结构,然后使用lapply
循环。这样,它就是list
,只有一个vector
mdf[column19] <- lapply(mdf[column19],function(x) as.numeric(gsub(",", "", x)))
这与在单个列或行上使用[
时删除维度更相关,因为默认情况下它是drop = TRUE
。
set.seed(24)
mdf <- as.data.frame(matrix(sample(paste(1:5, 6:10, sep=","),
5*20, replace = TRUE), 5, 20), stringsAsFactors=FALSE)