gpt4 book ai didi

r - 使用 read.zoo 停止默认将数据读取为因子

转载 作者:行者123 更新时间:2023-12-01 09:11:51 28 4
gpt4 key购买 nike

我正在使用 R 中的 zoo 包来分析时间序列数据。我有以下数据文件:

Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day,AOT_1640,AOT_1020,AOT_870,AOT_675,AOT_667,AOT_555,AOT_551,AOT_532,AOT_531,AOT_500,AOT_490,AOT_443,AOT_440,AOT_412,AOT_380,AOT_340,Water(cm),%TripletVar_1640,%TripletVar_1020,%TripletVar_870,%TripletVar_675,%TripletVar_667,%TripletVar_555,%TripletVar_551,%TripletVar_532,%TripletVar_531,%TripletVar_500,%TripletVar_490,%TripletVar_443,%TripletVar_440,%TripletVar_412,%TripletVar_380,%TripletVar_340,%WaterError,440-870Angstrom,380-500Angstrom,440-675Angstrom,500-870Angstrom,340-440Angstrom,440-675Angstrom(Polar),Last_Processing_Date(dd/mm/yyyy),Solar_Zenith_Angle
29:03:2011,09:26:28,88.393380,N/A,0.490230,0.553836,0.707512,N/A,N/A,N/A,N/A,N/A,0.911939,N/A,N/A,0.984430,N/A,1.046517,1.081283,1.632430,N/A,4.597345,4.551429,3.216097,N/A,N/A,N/A,N/A,N/A,2.587552,N/A,N/A,2.694179,N/A,2.085042,2.522511,2.309844,0.851964,0.497006,0.789257,0.898093,0.362423,N/A,13/04/2011,58.822462
29:03:2011,09:41:28,88.403796,N/A,0.440362,0.513093,0.676703,N/A,N/A,N/A,N/A,N/A,0.893867,N/A,N/A,0.965588,N/A,1.034943,1.079975,1.654521,N/A,12.867837,12.687550,11.037238,N/A,N/A,N/A,N/A,N/A,9.345739,N/A,N/A,8.423888,N/A,8.421787,9.334135,1.622026,0.937815,0.529939,0.852553,0.999260,0.431102,N/A,13/04/2011,57.070624
29:03:2011,10:11:29,88.424641,N/A,0.565148,0.654724,0.842142,N/A,N/A,N/A,N/A,N/A,1.070556,N/A,N/A,1.144966,N/A,1.208759,1.242663,1.666760,N/A,9.933505,9.499251,8.327355,N/A,N/A,N/A,N/A,N/A,6.781617,N/A,N/A,6.612952,N/A,5.600500,5.630695,1.302058,0.826713,0.438445,0.736362,0.884554,0.316539,N/A,13/04/2011,53.916620
29:03:2011,10:17:46,88.429005,N/A,0.593881,0.681572,0.866620,N/A,N/A,N/A,N/A,N/A,1.095508,N/A,N/A,1.168008,N/A,1.233022,1.268572,1.704882,N/A,4.072782,3.752197,3.210935,N/A,N/A,N/A,N/A,N/A,2.389567,N/A,N/A,2.385582,N/A,1.653326,1.015620,0.728711,0.798185,0.427272,0.716165,0.853963,0.319100,N/A,13/04/2011,53.323057
29:03:2011,10:26:27,88.435035,N/A,0.636627,0.714175,0.884887,N/A,N/A,N/A,N/A,N/A,1.092220,N/A,N/A,1.167024,N/A,1.224264,1.271774,1.626393,N/A,16.400200,10.585139,6.513873,N/A,N/A,N/A,N/A,N/A,3.169704,N/A,N/A,4.085949,N/A,3.963741,8.663229,10.035231,0.724581,0.411533,0.659996,0.764539,0.329073,N/A,13/04/2011,52.544475

我正在尝试使用以下代码阅读它:

f <- function(d, t) as.chron(paste(as.Date(chron(d, format='d:m:y')), t))

z = read.zoo("110329_110329_Chilbolton.lev10", sep=',', header=T, index = 1:2, FUN=f, as.is=F, dec=".")

但是数据集的所有列都被读取为因子 - 所以,当我执行 summary(z) 时,我得到如下输出:

X.TripletVar_340    X.WaterError X440.870Angstrom X380.500Angstrom X440.675Angstrom X500.870Angstrom
1.015620:1 0.728711:1 0.724581:1 0.411533:1 0.659996:1 0.764539:1
2.522511:1 1.302058:1 0.798185:1 0.427272:1 0.716165:1 0.853963:1
5.630695:1 1.622026:1 0.826713:1 0.438445:1 0.736362:1 0.884554:1
8.663229:1 2.309844:1 0.851964:1 0.497006:1 0.789257:1 0.898093:1
9.334135:1 10.035231:1 0.937815:1 0.529939:1 0.852553:1 0.999260:1

我怎样才能阻止它默认读取数据作为因素? read.table 可以很好地读取数据,不需要任何额外的参数来告诉它确保所有内容都保持为数字而不是因子 - 那么为什么 read.zoo 的行为不同?

我想我可以使用 colClasses 来指定每一列的类型,但我宁愿不这样做以防数据集中列的顺序发生变化 - 默认情况下将其转换为数字,然后尝试如果那行不通的因素会好得多。

有什么想法吗?

最佳答案

这已经被诊断出来,但让我们添加它,以便我们有一个可以在这里使用的 read.zoo 语句的示例。

有两个问题:(1) NA 表示为 N/A 而不是 NA,所以我们必须告诉它。 (2) 倒数第二列不是数字。 zoo 将数据表示为矩阵,因此它必须全部为数字(也支持 factor zoo 对象,但它们不能混合)。

试试这个(我们在示例中添加了第二条数据线以实现良好的测量)。请务必使用最新版本的 zoo 来运行示例数据,因为 text= 参数(指定数据本身的文本而不是文件名)是最近才添加的。另请注意,在 R 中 ?read.zoo 提供帮助,vignette("zoo-read") 提供完全致力于 read.zoo 示例。

Lines <- "Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day,AOT_1640,AOT_1020,AOT_870,AOT_675,AOT_667,AOT_555,AOT_551,AOT_532,AOT_531,AOT_500,AOT_490,AOT_443,AOT_440,AOT_412,AOT_380,AOT_340,Water(cm),%TripletVar_1640,%TripletVar_1020,%TripletVar_870,%TripletVar_675,%TripletVar_667,%TripletVar_555,%TripletVar_551,%TripletVar_532,%TripletVar_531,%TripletVar_500,%TripletVar_490,%TripletVar_443,%TripletVar_440,%TripletVar_412,%TripletVar_380,%TripletVar_340,%WaterError,440-870Angstrom,380-500Angstrom,440-675Angstrom,500-870Angstrom,340-440Angstrom,440-675Angstrom(Polar),Last_Processing_Date(dd/mm/yyyy),Solar_Zenith_Angle
29:03:2011,09:26:28,88.393380,N/A,0.490230,0.553836,0.707512,N/A,N/A,N/A,N/A,N/A,0.911939,N/A,N/A,0.984430,N/A,1.046517,1.081283,1.632430,N/A,4.597345,4.551429,3.216097,N/A,N/A,N/A,N/A,N/A,2.587552,N/A,N/A,2.694179,N/A,2.085042,2.522511,2.309844,0.851964,0.497006,0.789257,0.898093,0.362423,N/A,13/04/2011,58.822462
29:03:2012,09:26:28,88.393380,N/A,0.490230,0.553836,0.707512,N/A,N/A,N/A,N/A,N/A,0.911939,N/A,N/A,0.984430,N/A,1.046517,1.081283,1.632430,N/A,4.597345,4.551429,3.216097,N/A,N/A,N/A,N/A,N/A,2.587552,N/A,N/A,2.694179,N/A,2.085042,2.522511,2.309844,0.851964,0.497006,0.789257,0.898093,0.362423,N/A,13/04/2011,58.822462"

library(chron)
library(zoo)
colClasses <- c("character", "character", rep("numeric", 43))
colClasses[44] <- "NULL" # zap the non-numeric column
z <- read.zoo(text = Lines, header = TRUE, sep = ",", na.strings = "N/A",
index = 1:2, colClasses = colClasses, FUN = function(d, t)
as.chron(paste(d, t), "%d:%m:%Y %H:%M:%S"))

关于r - 使用 read.zoo 停止默认将数据读取为因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com