迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 R 中将多列从整数转换为数字类型

作者:迹忆客 最近更新:2023/03/21 浏览次数:

R 具有矢量化函数,可通过一行代码将多列从整数类型转换为数值类型,而无需使用循环。本文探讨了完成此任务的两种方法。

在这两种情况下,每一列的实际转换都是由 as.numeric() 函数完成的。

在 R 中将多列从整数转换为数字类型

首先,我们将创建一些示例数据。

示例代码:

# Create vectors.
n = letters[1:5]
p = as.integer(c(11:15))
q = as.integer(c(51:55))

# Create a data frame.
df = data.frame(Names = n, Col1 = p, Col2 = q)
df

# See the structure of the data frame.
# Note that two columns are of integer type.
str(df)

输出:

> df
  Names Col1 Col2
1     a   11   51
2     b   12   52
3     c   13   53
4     d   14   54
5     e   15   55
>
> # See the structure of the data frame.
> # Note that two columns are of integer type.
> str(df)
'data.frame':    5 obs. of  3 variables:
 $ Names: chr  "a" "b" "c" "d" ...
 $ Col1 : int  11 12 13 14 15
 $ Col2 : int  51 52 53 54 55

使用 lapply() 函数将多列从整数转换为 R 中的数字类型

Base R 的 lapply() 函数允许我们将函数应用于列表的元素。我们将应用 as.numeric() 函数。

lapply() 函数的文档建议对我们在其中指定的函数名称使用包装函数。

示例代码:

# First, we will create a copy of our data frame.
df1 = df

# Columns 2 and 3 are integer type.
# We will convert these to numeric.
# We will use a wrapper function as recommended.
df1[2:3] = lapply(df1[2:3], FUN = function(y){as.numeric(y)})

# Check that the columns are converted to numeric.
str(df1)

输出:

> df1[2:3] = lapply(df1[2:3], FUN = function(y){as.numeric(y)})
>
> # Check that the columns are converted to numeric.
> str(df1)
'data.frame':    5 obs. of  3 variables:
 $ Names: chr  "a" "b" "c" "d" ...
 $ Col1 : num  11 12 13 14 15
 $ Col2 : num  51 52 53 54 55

使用 dplyr 包函数将多列从整数转换为 R 中的数字类型

我们可以使用 dplyrmutate()across() 函数将整数列转换为数字。这样做的好处是整个系列的 tidyselect 函数都可用于选择列。

我们将在示例代码中使用标准列表语法和 tidyselect 函数 where() 选择列。

示例代码:

# Load the dplyr package.
library(dplyr)

# USING STANDARD LIST SYNTAX.
# Convert the columns.
df2 = df %>% mutate(across(.cols=2:3, .fns=as.numeric))

# Check that the columns are converted.
str(df2)

# USING TIDYSELECT WHERE FUNCTION.
# Convert ALL integer columns to numeric.
df3 = df %>% mutate(across(.cols=where(is.integer), .fns=as.numeric))

# Check that the columns are converted.
str(df3)

输出:

# USING STANDARD LIST SYNTAX.
# Convert the columns.
df2 = df %>% mutate(across(.cols=2:3, .fns=as.numeric))

# Check that the columns are converted.
str(df2)

# USING TIDYSELECT WHERE FUNCTION.
# Convert ALL integer columns to numeric.
df3 = df %>% mutate(across(.cols=where(is.integer), .fns=as.numeric))

# Check that the columns are converted.
str(df3)

在 R 中将多列从因子转换为数值类型

有时,因子水平用数字编码,主要是整数。我们不想转换这些列。

但是,在其他时候,具有整数的列可能会表示为 R 中的因子。将这些列转换为数字会带来挑战。

示例代码显示了将因子列转换为数值时会发生什么。

示例代码:

# Create a factor vector.
x = factor(c(15,15,20,25,30,30,30))

# See that these are 4 levels of factors.
# They are not numbers.
str(x)

# Convert the factor vector to numeric.
as.numeric(x) # This is not the result we want.

输出:

> # Create a factor vector.
> x = factor(c(15,15,20,25,30,30,30))
>
> # See that these are 4 levels of factors.
> # They are not numbers.
> str(x)
 Factor w/ 4 levels "15","20","25",..: 1 1 2 3 4 4 4
>
> # Convert the factor vector to numeric.
> as.numeric(x) # This is not the result we want.
[1] 1 1 2 3 4 4 4

当整数列碰巧被错误地表示为因子时,我们需要添加一个预备步骤以将其正确转换为数字。

我们必须先将因子转换为字符类型,然后再将字符转换为数值类型。

示例代码:

# First, convert the factor vector to a character type.
# Then convert the character type to numeric.
# Both the above can be done in a single step, as follows.
y = as.numeric(as.character(x))
y

# Check that y is numeric.
str(y)

输出:

> y = as.numeric(as.character(x))
> y
[1] 15 15 20 25 30 30 30
>
> # Check that y is numeric.
> str(y)
 num [1:7] 15 15 20 25 30 30 30

让我们看一个带有数据框的示例。我们将使用 dplyr 方法。

示例代码:

# Create a factor vector.
f = factor(c(20,20,30,30,30))

# Create a data frame.
df4 = data.frame(Name=n, Col1=p, Col2=q, Fac=f)
df4

# Check the structure.
str(df4)

# We will use the dplyr approach.

# First only convert integer type columns.
df5 = df4 %>% mutate(across(.cols=where(is.integer), .fns=as.numeric))
# Factor column did not get converted.
str(df5)

# Now, we will START AGAIN, and convert the factor column as well.
# To modify an existing column by name, we will give it the SAME name.
df6 = df4 %>% mutate(across(.cols=where(is.integer), .fns=as.numeric), Fac=as.numeric(as.character(Fac)))
df6
# Check that the factor column has also got converted.
str(df6)

输出:

> # Create a factor vector.
> f = factor(c(20,20,30,30,30))
>
> # Create a data frame.
> df4 = data.frame(Name=n, Col1=p, Col2=q, Fac=f)
> df4
  Name Col1 Col2 Fac
1    a   11   51  20
2    b   12   52  20
3    c   13   53  30
4    d   14   54  30
5    e   15   55  30
>
> # Check the structure.
> str(df4)
'data.frame':    5 obs. of  4 variables:
 $ Name: chr  "a" "b" "c" "d" ...
 $ Col1: int  11 12 13 14 15
 $ Col2: int  51 52 53 54 55
 $ Fac : Factor w/ 2 levels "20","30": 1 1 2 2 2
>
> # We will use the dplyr approach.
>
> # First only convert integer type columns.
> df5 = df4 %>% mutate(across(.cols=where(is.integer), .fns=as.numeric))
> # Factor column did not get converted.
> str(df5)
'data.frame':    5 obs. of  4 variables:
 $ Name: chr  "a" "b" "c" "d" ...
 $ Col1: num  11 12 13 14 15
 $ Col2: num  51 52 53 54 55
 $ Fac : Factor w/ 2 levels "20","30": 1 1 2 2 2
>
> # Now, we will START AGAIN, and convert the factor column as well.
> # To modify an existing column by name, we will give it the SAME name.
> df6 = df4 %>% mutate(across(.cols=where(is.integer), .fns=as.numeric), Fac=as.numeric(as.character(Fac)))
> df6
  Name Col1 Col2 Fac
1    a   11   51  20
2    b   12   52  20
3    c   13   53  30
4    d   14   54  30
5    e   15   55  30
> # Check that the factor column has also got converted.
> str(df6)
'data.frame':    5 obs. of  4 variables:
 $ Name: chr  "a" "b" "c" "d" ...
 $ Col1: num  11 12 13 14 15
 $ Col2: num  51 52 53 54 55
 $ Fac : num  20 20 30 30 30

tidyselect 函数的文档在选择语言网页上。请参阅 R 的 lapply() 函数文档以了解对包装函数的需求。

as.numeric() 函数的文档提供了第二种将表示为因子的整数转换为数值类型的方法。

结论

在开始将整数列转换为数值类型之前,我们需要检查整数列是否为整数类型。如果将它们表示为因子并希望将它们转换为数字,我们需要采取额外的步骤来确保正确转换。

可以使用基本 R 的 lapply() 函数或 dplyrmutate()across() 函数的组合来完成转换。实际的转换是使用 as.numeric() 函数完成的。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

R 中具有多个条件的函数向量化

发布时间:2023/03/21 浏览次数:64 分类:编程语言

一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更

在 R 中读取 xlsx 文件

发布时间:2023/03/21 浏览次数:66 分类:编程语言

在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。

清理 R 的环境

发布时间:2023/03/21 浏览次数:178 分类:编程语言

在本教程中,你将学习如何在 R 中编写一个函数,在不需要重新启动 R 的情况下清除环境。

在 R 中注释掉多行

发布时间:2023/03/21 浏览次数:63 分类:编程语言

在本文中,你将学习如何在 R 中注释出多行,而不必在每一行的开头手动写一个#字符来注释。

在 R 中清除内存

发布时间:2023/03/21 浏览次数:197 分类:编程语言

在本教程中,你将学习如何清除 R 系统占用的内存,而不必重新启动它或重新启动它运行的计算机。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便