r - 由多个步骤组成的数据框修改
问题描述
我有这两个数据集,我试图将它们用于线性回归。一个包含从气象站测量的每日平均值(自变量)。
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
第二个基本上是一个记录器数据(因变量),它可能每天有几个测量值或没有(记录器数据集)(数据表 jpeg)。我需要修改记录器数据,使其与站点数据一致,并且可以对这些数据进行回归(这意味着每天应该有 1 行)。需要对同一天发生的记录仪测量值(“距离”列)进行汇总,以便获得每天的单个值;因此,例如,如果 2014 年 1 月 2 日有 3 个测量值,则值应为 2.355 (3 x 0.785)。此外,我需要为该期间的每一天创建一行以匹配车站数据的样本大小。记录器没有测量值的一天应该是 0。我需要对大量数据集执行这些修改,所以我需要找出一个以自动/半自动方式执行此操作的代码。手动添加数据将是荒谬的,因为数据集最多有几千行。不幸的是,我不能 最近几天没有想出任何有意义的事情。任何帮助表示赞赏。
我希望我设法在这里解释了这个问题。让我知道您是否需要更多说明。提前致谢!
PS我管理了按日期汇总并获得每日总和的第一部分,但是我仍然坚持在给定时间段内为每一天创建一行并为“距离”变量分配0。这就是我到目前为止所拥有的。
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包,它使连接变得超级简单和快速。
为简洁起见,我不报告您的数据,因此您会看到代码开始时就好像logger
and station
data.frame 已经在环境中一样。代码执行以下操作:它将列Distance
和AccuDist
(假设这两列是重要的一列)按列相加date
,这是在Date
类中正确格式化的列。
然后,我使用功能设置合并键setkey()
。如果您想了解更多关于如何加入工作以及如何使用 data.table 执行它们的信息,请参阅此链接。如果您想了解更多关于data.table的一般信息,可以参考官方网站。
final
然后我定义来自右外连接的 data.table 。这样,我将保留 object 中的所有观察结果(即行)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
这有帮助吗?
推荐阅读
- c - 如何在 C 中生成随机布尔值?
- django - RequestError(400, u'action_request_validation_exception', u'Validation Failed: 1: type is missing;
- c++ - 为什么此代码无法将 char 推回向量中
? - mysql - mysql:未知选项'--skip-grant-tables'
- postgresql - 通过二维数组列的第二维中的值查询表
- ios - UIBarButtonItem 操作方法在某些情况下不起作用
- image - 使用 Vimwiki 将图像嵌入到需要在系统之间传输的 wiki
- visual-studio-code - 无法记录远程控制台参数 超出限制的大对象的输出被忽略
- django - 由 django updateview 重定向但未更新
- swift - 如何使用在 XIB 自定义视图中创建的按钮来控制 viewController.swift 中的 setContentOffset?