如何找到因子列和数字列之间的比率?

时间:2019-04-12 00:16:40

标签: r format gsub

我有一个因子列和一个数字列,我需要找到它们之间的比率,然后对其进行格式化,以便新变量具有两个小数位。

我尝试使用as.numeric(as.character())转换因子变量,然后将二者相除以找到比率,但结果是NA的向量。另外,我需要使用基本r代码。

x=as.numeric(as.character(TotalElectric)) / Power_from_renew
format(x, digits=2)
TotalElectric Power_from_renew
1             833         1313.400
2           4,525         8135.400
3          75,200          673.000
4           5,512         7391.300
5             105         2952.000
6         147,000        32523.800
7           7,763         2596.700
8             980         2743.400
9         259,400        37448.000
10         70,100        53853.000
11         24,300         2191.900
12          2,190         2948.400
13         13,086         2847.000
14         74,700         1183.100
15          1,002         2867.100

使用上面的代码时,我的结果是

Power_from_renew
1                 NA
2                 NA
3                 NA
4                 NA
5                 NA
6                 NA

我还尝试使用gsub格式化因子变量,但结果相同。

1 个答案:

答案 0 :(得分:1)

@ r2evans解决方案可以完美地工作。您可能做错了事。

# > tst
# TotalElectric Power_from_renew
# 1           833           1313.4
# 2         4,525           8135.4
# 3        75,200            673.0
# 4         5,512           7391.3
# 5           105           2952.0
# 6       147,000          32523.8
# 7         7,763           2596.7
# 8           980           2743.4
# 9       259,400          37448.0
# 10        70,100          53853.0
# 11        24,300           2191.9
# 12         2,190           2948.4
# 13        13,086           2847.0
# 14        74,700           1183.1
# 15         1,002           2867.1

tst <- as.data.frame(tst)
class(tst$TotalElectric)
# [1] "factor"
class(tst$Power_from_renew)
# [1] "numeric"

x=as.numeric(as.numeric(gsub(",","",tst$TotalElectric))) / tst$Power_from_renew

format(x, digits=2)
#   [1] "  0.634" "  0.556" "111.738" "  0.746" "  0.036" "  4.520" "  2.990" "  0.357" "  6.927" "  1.302" " 11.086" "  0.743" "  4.596"
#   [14] " 63.139" "  0.349"