Nasıl bir bilgi kaybı olmadan tam sayı\bir sayısal bir faktör dönüştürmek için?
Sayısal veya bir tamsayı için bir faktör dönüştürdüğünüzde, temel seviyede kodları, numaraları gibi değerleri alıyorum.
f <- factor(sample(runif(5), 20, replace = TRUE))
## [1] 0.0248644019011408 0.0248644019011408 0.179684827337041
## [4] 0.0284090070053935 0.363644931698218 0.363644931698218
## [7] 0.179684827337041 0.249704354675487 0.249704354675487
## [10] 0.0248644019011408 0.249704354675487 0.0284090070053935
## [13] 0.179684827337041 0.0248644019011408 0.179684827337041
## [16] 0.363644931698218 0.249704354675487 0.363644931698218
## [19] 0.179684827337041 0.0284090070053935
## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218
as.numeric(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
as.integer(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
paste
başvurmak için gerçek değerleri almam lazım.
as.numeric(paste(f))
## [1] 0.02486440 0.02486440 0.17968483 0.02840901 0.36364493 0.36364493
## [7] 0.17968483 0.24970435 0.24970435 0.02486440 0.24970435 0.02840901
## [13] 0.17968483 0.02486440 0.17968483 0.36364493 0.24970435 0.36364493
## [19] 0.17968483 0.02840901
Daha iyi bir şekilde sayısal bir faktör dönüştürmek için var mı?
CEVAP
?factor
Uyarı bölümüne bakın:
Özellikle,
as.numeric
uygulanan için anlamsız bir faktör olabilir. örtülü zorlamayla olur. İçin dönüşüm 8 ** bir faktör orijinal sayısal yaklaşık değerler,as.numeric(levels(f))[f]
tavsiye ve biraz daha daha verimlias.numeric(as.character(f))
.
R has similar advice SSS.
Neden as.numeric(levels(f))[f]
as.numeric(as.character(f))
daha verimli olur?
as.numeric(as.character(f))
etkili nlevels(x)
değerler length(x)
değerleri yerine sayısal dönüştürme yapıyorsanız yani 14**. Hız farkı birkaç seviyeleri ile uzun vektörleri için en belli olacak. Eğer bu değerler çoğunlukla benzersiz, hız olarak pek bir fark olmayacak. dönüşüm yaparsanız yapın, bu işlem kodunuzu darboğaz olmak unliekly, bu yüzden çok fazla dert etmeyin.
Bazı zamanlamalar
library(microbenchmark)
microbenchmark(
as.numeric(levels(f))[f],
as.numeric(levels(f)[f]),
as.numeric(as.character(f)),
paste0(x),
paste(x),
times = 1e5
)
## Unit: microseconds
## expr min lq mean median uq max neval
## as.numeric(levels(f))[f] 3.982 5.120 6.088624 5.405 5.974 1981.418 1e 05
## as.numeric(levels(f)[f]) 5.973 7.111 8.352032 7.396 8.250 4256.380 1e 05
## as.numeric(as.character(f)) 6.827 8.249 9.628264 8.534 9.671 1983.694 1e 05
## paste0(x) 7.964 9.387 11.026351 9.956 10.810 2911.257 1e 05
## paste(x) 7.965 9.387 11.127308 9.956 11.093 2419.458 1e 05
Nasıl bir kare sütun veri türü sayısal...
Nasıl veri kaybı olmadan SQL Server ve...
Nasıl sayısal değeri (Java) için bir b...
Bir Liste dönüştürmek için nasıl<Di...
Nasıl alfa-sayısal rasgele bir dize ol...