由多个步骤组成的数据框修改

Dataframe modification consisting of multiple steps

我有这两个数据集,我正试图将它们用于线性回归。一个包含根据天气 station.

测量的每日平均值(自变量)
date  ST5_mean  ST1_mean  ST0_mean ST10_mean Snowheight Precipitation
1 2014-10-08 11.136713 10.980278 11.333995 11.622550 0.23680556           118
2 2014-10-09  9.255580  8.727486  8.796319 11.635243 0.00000000           124
3 2014-10-10 10.297521  9.441427  9.376736 12.879920 0.00000000           108
4 2014-10-11  9.080031  9.172347  9.389281  9.372538 0.01041667           152
5 2014-10-12 10.059455  9.428875  9.392774 11.866694 0.00000000           425
.
.
.
242 2015-06-06 12.946955 11.979896 11.50326 14.060399 0.00000000           470
243 2015-06-07 12.918128 11.737031 11.17246 13.691757 0.00000000           407
244 2015-06-08 12.214410 11.779344 11.50781 12.370771 0.00000000           100
245 2015-06-09 11.271517 10.942083 10.79751 11.324122 0.00000000            19
246 2015-06-10  8.597696  9.730661 10.20789  8.181455 0.01180556           481

第二个基本上是一个记录器数据(因变量),每天可能有几次测量或 none (logger dataset) (data table jpeg)。我需要修改记录器数据,使其与站数据一致,并且可以 运行 对这些数据进行回归(这意味着每天应该有 1 行)。需要将同一天发生的记录器测量值(“距离”列)相加,以便获得每天的单个值;因此,如果 1.2.2014 有 3 个测量值,则值应该为 2.355 (3 x 0.785)。此外,我需要为期间的每一天创建一行以匹配站点数据的样本大小。记录器没有测量值的那一天的值应该为 0。我需要对大量数据集执行这些修改,所以我需要找出以 automatic/semi-automatic 方式执行此操作的代码。手动添加数据是荒谬的,因为数据集最多有几千行。不幸的是,最近几天我想不出任何有意义的东西。感谢任何帮助。

我希望我能在这里解释问题。让我知道您是否需要更多说明。提前致谢!

P.S 我管理了第一部分,我按日期汇总并获得每日总和,但是我仍然坚持在给定时间段内为每一天创建一行并为“距离”变量。这是我目前所拥有的。

startTime <- as.Date("2014-10-08")
endTime <- as.Date("2015-06-10")
start_end <- c(startTime,endTime)
startTime <- as.Date("2014-10-08")
logger1 <- read.csv("124106_106.csv",header=TRUE, sep=",")
logger1$date <- as.Date(logger1$Date, "%d.%m.%Y")
logger1_sum <- aggregate (logger1$Distance, by = list(logger1$date), FUN = sum, na.rm=TRUE)"
names (logger1_sum) <- c("date", "distance")

head(logger1_sum, 5)
       date distance
1 2014-10-02    1.570
2 2014-10-03    3.140
3 2014-10-08    3.925
4 2014-10-23    9.420
5 2014-10-24    3.925

tail(logger1_sum, 5)
        date distance
45 2015-05-26    1.570
46 2015-05-27    1.570
47 2015-05-28    1.570
48 2015-06-10    0.785
49 2015-07-06    1.570

我认为这应该可以完成工作。我使用 data.table 包,它使连接变得超级简单和快速。

为简洁起见,我不会报告您的数据,因此您会看到代码开始时就好像 loggerstation data.frame 已经在环境中一样。该代码执行以下操作:它按 date 列对 DistanceAccuDist 列(假设这两列是重要的一列)求和,这是 [=16] 中正确格式化的列=] class.

然后,我用函数setkey()设置合并键。如果您想阅读更多有关如何加入工作以及如何使用 data.table 执行它们的信息,请参阅 this link. If you instead want to know more about data.table in general, you can refer to the official website here

然后我定义 data.table final,它来自 right outer join。这样,我将保留对象 station.

中的所有观察结果(即行)
library(data.table)

# this converts the two data.frame in data.table by reference
setDT(logger)
setDT(station)

# sum Distance by date
logger_summed <- logger[ , .( sum_Distance = sum(Distance), 
                              sum_AccuDist = sum(AccuDist)), by = date]

> head(logger_summed)
##       date    sum_Distance sum_AccuDist
## 1: 2014-10-02        1.570        2.355
## 2: 2014-10-03        3.140       14.130
## 3: 2014-10-08        3.925       35.325
## 4: 2014-10-23        9.420      164.850
## 5: 2014-10-24        3.925      102.050
## 6: 2014-10-25        2.355       70.650


setkey( logger_summed, date )
setkey( station, date )

final <- logger_summed[ station ]
final[ is.na(sum_Distance), `:=` ( sum_Distance = 0, sum_AccuDist = 0) ]

> final
##           date sum_Distance sum_AccuDist  ST5_mean  ST1_mean  ST0_mean ST10_mean Snowheight Precipitation
##  1: 2014-10-08        3.925       35.325 11.136713 10.980278 11.333995 11.622550 0.23680556           118
##  2: 2014-10-09        0.000        0.000  9.255580  8.727486  8.796319 11.635243 0.00000000           124
##  3: 2014-10-10        0.000        0.000 10.297521  9.441427  9.376736 12.879920 0.00000000           108
##  4: 2014-10-11        0.000        0.000  9.080031  9.172347  9.389281  9.372538 0.01041667           152
##  5: 2014-10-12        0.000        0.000 10.059455  9.428875  9.392774 11.866694 0.00000000           425
## ---                                                                                                      
## 242: 2015-06-06        0.000        0.000 12.946955 11.979896 11.503257 14.060399 0.00000000           470
## 243: 2015-06-07        0.000        0.000 12.918128 11.737031 11.172462 13.691757 0.00000000           407
## 244: 2015-06-08        0.000        0.000 12.214410 11.779344 11.507812 12.370771 0.00000000           100
## 245: 2015-06-09        0.000        0.000 11.271517 10.942083 10.797510 11.324122 0.00000000            19
## 246: 2015-06-10        0.785      115.395  8.597696  9.730661 10.207893  8.181455 0.01180556           481

这有帮助吗?