如何通过for循环更改列类型?

如何通过for循环更改列类型?,r,R,我有一个df,其中一些列是字符类型,我希望它们是整数值。我知道我可以使用as.integer切换键入: df$i <- as.integer(df$i) df$i更简单的方法是使用dplyr::mutate\u at: df <- dplyr::mutate_at(df, c(37:49, 53:61), as.integer) df我认为purrr::map或lappy在这里提供了相当优雅的解决方案(如果可能的话,只需对R中的循环说不): 让我们用所有字符向量制作一个假数据帧:

我有一个df,其中一些列是字符类型,我希望它们是整数值。我知道我可以使用as.integer切换键入:

df$i <- as.integer(df$i)

df$i更简单的方法是使用
dplyr::mutate\u at

df <- dplyr::mutate_at(df, c(37:49, 53:61), as.integer)

df我认为
purrr::map
lappy
在这里提供了相当优雅的解决方案(如果可能的话,只需对R中的循环说不):

让我们用所有字符向量制作一个假数据帧:

> df <- data.frame(let1 = c('a', 'b', 'c'), num1 = c('1', '2', '3'),
             let2 = c('d', 'e', 'f'), num2 = c('4', '5', '6'),
             num3 = c('7', '8', '9'), let3 = c('g', 'h', 'i'),
             stringsAsFactors = FALSE)
> str(df)
'data.frame':   3 obs. of  6 variables:
 $ let1: chr  "a" "b" "c"
 $ num1: chr  "1" "2" "3"
 $ let2: chr  "d" "e" "f"
 $ num2: chr  "4" "5" "6"
 $ num3: chr  "7" "8" "9"
 $ let3: chr  "g" "h" "i"
如果您不想加载任何其他软件包,
lappy
将起作用:

> df3 <- df
> df3[, c(2,4,5)] <- lapply(df3[, c(2,4,5)], as.integer)
> str(df3)
'data.frame':   3 obs. of  6 variables:
 $ let1: chr  "a" "b" "c"
 $ num1: int  1 2 3
 $ let2: chr  "d" "e" "f"
 $ num2: int  4 5 6
 $ num3: int  7 8 9
 $ let3: chr  "g" "h" "i"
df3-df3[,c(2,4,5)]str(df3) “data.frame”:3个obs。共有6个变量: $let1:chr“a”“b”“c” $num1:int 1 2 3 $let2:chr“d”“e”“f” $num2:int 4 5 6 $num3:int 7 8 9 $let3:chr“g”“h”“i”
这里有很多选项,但是作为第一步,您可以像通常一样尝试在for循环中使用
as.integer
df[,i]还有一件事:通常最好使用
以获得最佳结果,避免使用for循环。您可以使用
dplyr
包中的
mutate\u at
mutate\u if
mutate\u all
等轻松地将特定列更改为整数
> df2 <- df
> df2[, c(2,4,5)] <- purrr::map(df2[, c(2,4,5)], as.integer)
> str(df2)
'data.frame':   3 obs. of  6 variables:
 $ let1: chr  "a" "b" "c"
 $ num1: int  1 2 3
 $ let2: chr  "d" "e" "f"
 $ num2: int  4 5 6
 $ num3: int  7 8 9
 $ let3: chr  "g" "h" "i"
> df3 <- df
> df3[, c(2,4,5)] <- lapply(df3[, c(2,4,5)], as.integer)
> str(df3)
'data.frame':   3 obs. of  6 variables:
 $ let1: chr  "a" "b" "c"
 $ num1: int  1 2 3
 $ let2: chr  "d" "e" "f"
 $ num2: int  4 5 6
 $ num3: int  7 8 9
 $ let3: chr  "g" "h" "i"