在跳过特定列R时拉普利

时间:2018-02-21 18:57:42

标签: r lapply

尝试使用以下内容对数据框中的列执行lapply:

all <- lapply(all, function(x) as.numeric(as.character(x)))

执行此操作以将数据框的默认值从chr更改为numeric,这是由于从excel导入时的默认值。

有没有办法可以在除特定列之外的所有列上执行此操作? (在这种情况下,跳过一列并申请其余的)谢谢。

4 个答案:

答案 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_atmodify_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(.)))