尝试使用以下内容对数据框中的列执行lapply:
all <- lapply(all, function(x) as.numeric(as.character(x)))
执行此操作以将数据框的默认值从chr更改为numeric,这是由于从excel导入时的默认值。
有没有办法可以在除特定列之外的所有列上执行此操作? (在这种情况下,跳过一列并申请其余的)谢谢。
答案 0 :(得分:3)
对于跳过单个列,您可以执行以下操作:
all[,-1] <- lapply(all[,-1], function(x) as.numeric(as.character(x)))
答案 1 :(得分:0)
向量columns.of.interest
可以是表示数据框中列位置的数值,也可以是由列名组成的字符串。我使用sapply()
来返回向量。
# store columns of interest
columns.of.interest <- 2:ncol( all )
# filter by columns of interest
all[ , columns.of.interest ] <- sapply( X = all[ , columns.of.interest ]
, FUN = function(x) as.numeric(as.character(x)))
答案 2 :(得分:0)
为什么不试试apply
,你可以这样做:
col <- c(<specific_columns>)
x[,col] <- apply(x[,col],2,as.numeric)
查看R控制台中的?apply
以获取更多信息。
答案 3 :(得分:0)
您可以使用基础R:
进行适当的修改df <- data.frame(a= as.character(1:5),
b = as.character(6:10),
c = factor(letters[1:5]),
stringsAsFactors = FALSE)
# str(df)
# 'data.frame': 5 obs. of 3 variables:
# $ a: chr "1" "2" "3" "4" ...
# $ b: chr "6" "7" "8" "9" ...
# $ c: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
df[-3] <- lapply(df[-3], function(x) as.numeric(as.character(x)))
str(df)
# 'data.frame': 5 obs. of 3 variables:
# $ a: num 1 2 3 4 5
# $ b: num 6 7 8 9 10
# $ c: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
或使用库purrr
并使用modify_at
或modify_if
df2 <- purrr::modify_at(df,.at = c("a","b"),~as.numeric(as.character(.)))
df3 <- purrr::modify_if(df,is.character,~as.numeric(as.character(.)))