如何找到因子列和数字列之间的比率?
How to find the ratio between a factor column and numeric column?
我有一个因子列和一个数值列,我需要找到两者之间的比率,然后对其进行格式化,使新变量有两位小数。
我尝试使用 as.numeric(as.character()) 转换因子变量,然后将两者相除以求比率,但结果是 NA 的向量。另外,我需要使用 base 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 格式化因子变量,但结果相同。
@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"
我有一个因子列和一个数值列,我需要找到两者之间的比率,然后对其进行格式化,使新变量有两位小数。
我尝试使用 as.numeric(as.character()) 转换因子变量,然后将两者相除以求比率,但结果是 NA 的向量。另外,我需要使用 base 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 格式化因子变量,但结果相同。
@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"