在我的示例数据中,有:
- 5个日期,date1:date5 - 5个年份,y1:y5 - 以及5个变量,TA_JDRng、TH_JDMax、TH_JDMaxMn、TH_JDMaxSD、TH_JDMaxVar 基本上,每个变量都是在5个特定日期的每年记录一次。
data <-
read.table(header = TRUE,
text = "date var y1 y2 y3 y4 y5
date1 TA_JDRng 123 80 80 80 80
date1 TH_JDMax 343 343 343 343 343
date1 TH_JDMaxMn 107.4286 107.4286 107.4286 114.1429 131.1429
date1 TH_JDMaxSD 161.2729 161.2729 161.2729 157.6234 93.4477
date1 TH_JDMaxVar 26008.9524 26008.9524 26008.9524 24845.1429 8732.4762
date2 TA_JDRng 123 80 80 80 80
date2 TH_JDMax 343 343 343 343 343
date2 TH_JDMaxMn 107.4286 107.4286 107.4286 114.1429 134.2857
date2 TH_JDMaxSD 161.2729 161.2729 161.2729 157.6234 92.0502
date2 TH_JDMaxVar 26008.9524 26008.9524 26008.9524 24845.1429 8473.2381
date3 TA_JDRng 123 80 80 80 80
date3 TH_JDMax 343 343 343 343 343
date3 TH_JDMaxMn 107.4286 107.4286 107.4286 114.1429 114.1429
date3 TH_JDMaxSD 161.2729 161.2729 161.2729 157.6234 157.6234
date3 TH_JDMaxVar 26008.9524 26008.9524 26008.9524 24845.1429 24845.1429
date4 TA_JDRng 77 99 56 56 56
date4 TH_JDMax 319 319 319 319 319
date4 TH_JDMaxMn 180.7143 180.7143 180.7143 180.7143 180.7143
date4 TH_JDMaxSD 162.8903 162.8903 162.8903 162.8903 162.8903
date4 TH_JDMaxVar 26533.2381 26533.2381 26533.2381 26533.2381 26533.2381
date5 TA_JDRng 177 77 99 56 56
date5 TH_JDMax 65 319 319 319 319
date5 TH_JDMaxMn 59.2857 180.7143 180.7143 180.7143 180.7143
date5 TH_JDMaxSD 13.901 162.8903 162.8903 162.8903 162.8903
date5 TH_JDMaxVar 193.2381 26533.2381 26533.2381 26533.2381 26533.2381")
在这一步骤中,情况略微变得复杂。我知道我需要将其转换为数组,并已找到了相应的方法。
dataArray <- simplify2array(by(data, data$XorYorZ, as.matrix))
首先不清楚的是,我是否应该按日期或年份拆分 (data$XorYorZ
),或者这并不重要。
dataArray <- simplify2array(by(data, data$date, as.matrix))
dim(dataArray)
我并不完全认为这看起来正确,因为我们仍然保留了日期和变量的列。我知道它们不会像魔术一样消失,但我不知道a)是否需要解决这个问题,如果需要,那么b)如何解决。
再次强调,我知道如何计算相关矩阵,但目前无法工作。
corM <- apply(dataArray, 1:2, cor.test, unique(data$date))
Error in cor.test.default(newX[, i], ...) : 'x' must be a numeric vector
我相信我理解错误的原因是文本仍然存在于数组中,但我不知道该如何解决。我考虑将日期和变量转换为数字类别,但我不确定这是否是正确的方法。
有人能否澄清一下我的步骤错在哪里?我相信这是一些简单的问题,但我只是看不到它。提前感谢您的帮助!
如果相关 - 我最终试图确定年份和变量之间的相关性。我试图确定是否存在高度相关性,如果是,则可以放弃一些年份。
simplify2array(by(data[, 3:7], list(data$date, data$var), as.matrix))
进行简化。您不需要拆分整个数据集,因为整个数据集包含日期和变量的名称。我的理解是您只需要数值数据,因此将其作为by
命令的第一个参数进行选择。 - coffeinjunkylist(date, var)
,没有其他特别的原因。如果那让你感到困惑,我很抱歉。主要的问题是,应该避免将包含字符的数据框转换成矩阵,因为这样会导致所有变量都被转换成字符型。 - coffeinjunky