Bu soru birkaç yaşında, ama ben ona rastladım, bu da belki başkalarının isteyeceği anlamına geliyor.
readr
Kütüphane / paket o güzel bazı özelliklere sahiptir. Bunlardan biri, bunun gibi "dağınık" yazıları yorumlamanın güzel bir yoludur.
library(readr)
read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5",
col_types = list(col_numeric())
)
Bu verir
Kaynak: yerel veri çerçevesi [4 x 1]
numbers
(dbl)
1 800.0
2 1800.0
3 3500.0
4 6.5
Dosyalarda okurken önemli bir nokta: ya yukarıdaki yorumda olduğu gibi ön işlem yapmalısınız sed
ya da okurken işlem yapmalısınız . Genellikle, olaydan sonra bir şeyleri düzeltmeye çalışırsanız, bulunması zor olan bazı tehlikeli varsayımlar yapılır. (Bu yüzden düz dosyalar ilk etapta çok kötüdür.)
Örneğin, işaretlemeseydim col_types
, şunu alırdım:
> read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5")
Source: local data frame [4 x 1]
numbers
(chr)
1 800
2 1,800
3 3500
4 6.5
(Artık a yerine a chr
( character
) olduğuna dikkat edin numeric
.)
Ya da daha tehlikeli bir şekilde, yeterince uzun olsaydı ve ilk öğelerin çoğu virgül içermiyorsa:
> set.seed(1)
> tmp <- as.character(sample(c(1:10), 100, replace=TRUE))
> tmp <- c(tmp, "1,003")
> tmp <- paste(tmp, collapse="\"\n\"")
(öyle ki son birkaç öğe şöyle görünür :)
\"5\"\n\"9\"\n\"7\"\n\"1,003"
O zaman o virgülü okumakta zorlanacaksınız!
> tail(read_csv(tmp))
Source: local data frame [6 x 1]
3"
(dbl)
1 8.000
2 5.000
3 5.000
4 9.000
5 7.000
6 1.003
Warning message:
1 problems parsing literal data. See problems(...) for more details.
setAs("character", "logical.Y.N", function(from) c(Y=TRUE,N=FALSE)[from] )
).