如何通过for循环更改列类型?
我有一个df,其中一些列是字符类型,我希望它们是整数值。我知道我可以使用as.integer切换键入:如何通过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$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"