Bor*_*lis 21 r numeric dataframe
我有一个混合类数据帧(数字和因子),我试图将整个数据帧转换为数字.以下说明了我正在使用的数据类型以及我遇到的问题:
> a = as.factor(c(0.01,0.02,0.03,0.04))
> b = c(2,4,5,7)
> df1 = data.frame(a,b)
> class(df1$a)
[1] "factor"
> class(df1$b)
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)
当我尝试将整个数据框转换为数字时,它会改变数值.例如:
> df2 = as.data.frame(sapply(df1, as.numeric))
> class(df2$a)
[1] "numeric"
> df2
a b
1 1 2
2 2 4
3 3 5
4 4 7
Run Code Online (Sandbox Code Playgroud)
此站点上的先前帖子建议使用as.numeric(as.character(df1$a)),这对于一列非常有用.但是,我需要将此方法应用于可能包含数百列的数据框.
将整个数据帧从因子转换为数字,同时保留数字十进制值,我有哪些选择?
下面是我想产生其中输出a和b是数字:
a b
1 0.01 2
2 0.02 4
3 0.03 5
4 0.04 7
Run Code Online (Sandbox Code Playgroud)
我已阅读以下相关帖子,但它们都不直接适用于此案例:
Ric*_*ven 18
您可能需要进行一些检查.您无法安全地将因子直接转换为数字. as.character必须先申请.否则,因子将转换为其数字存储值.我会检查每一列,is.factor然后根据需要强制数字.
df1[] <- lapply(df1, function(x) {
if(is.factor(x)) as.numeric(as.character(x)) else x
})
sapply(df1, class)
# a b
# "numeric" "numeric"
Run Code Online (Sandbox Code Playgroud)
R. *_*ost 14
使用dplyr(有点像sapply ..)
df2 <- mutate_all(df1, function(x) as.numeric(as.character(x)))
Run Code Online (Sandbox Code Playgroud)
这使:
glimpse(df2)
Observations: 4
Variables: 2
$ a <dbl> 0.01, 0.02, 0.03, 0.04
$ b <dbl> 2, 4, 5, 7
Run Code Online (Sandbox Code Playgroud)
来自你的df1:
glimpse(df1)
Observations: 4
Variables: 2
$ a <fctr> 0.01, 0.02, 0.03, 0.04
$ b <dbl> 2, 4, 5, 7
Run Code Online (Sandbox Code Playgroud)
df2 <- data.frame(apply(df1, 2, function(x) as.numeric(as.character(x))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64089 次 |
| 最近记录: |