【发布时间】:2021-11-07 08:35:24
【问题描述】:
我正在对数据进行 QC,对于多个储罐/数据类型,存在需要删除的错误数据,跨越多个时间范围。包含错误数据的 data_types、tank 和 time 范围已在单独的数据框中报告,其中一个 sn-p 包含在此 QC_table 中:
structure(list(trial = c(1L, 1L, 1L, 1L, 2L, 2L), data_type = c("Temp",
"pH", "pH", "pH", "Temp", "Temp"), tank = c("29", "40", "40",
"40", "13", "29"), date_time_start = c("2021-03-31 8:30", "2021-03-31 7:50",
"2021-03-31 10:25", "2021-03-31 17:05", "2021-04-07 10:25", "2021-04-08 10:30"
), date_time_end = c("2021-03-31 18:00", "2021-03-31 8:15", "2021-03-31 10:40",
"2021-03-31 17:30", "2021-04-07 17:20", "2021-04-10 18:25"),
to.be.removed = c("yes ", "yes ", "yes ", "yes ", "yes ",
"yes "), reason = c("calibration error", "faulty probe",
"faulty probe", "faulty probe", "calibration error", "faulty probe"
), data_type_tank = c("WalchemTempTank29", "pH_Tank40", "pH_Tank40",
"pH_Tank40", "WalchemTempTank13", "WalchemTempTank29")), row.names = c(NA,
-6L), class = "data.frame")
对此还有额外的试验和坦克。我的方法是创建一个包含所有需要删除的数据的新数据框(基于 QC 表中的 data_type_tank 和 date_time_start/end 列),然后从原始数据框中删除该数据框。我不知道这是否最合乎逻辑,但我不知道如何从原始数据框中删除数据。
我使用以下方法构造一个新的数据框:
new_dataframe <- dataframe %>%
select(c(Measurement.time, Trial, contains(urchin_temp_pH_QC$data_type_tank))) %>% head(10)
structure(list(Measurement.time = c("2021-03-30 11:00", "2021-03-30 11:05",
"2021-03-30 11:10", "2021-03-30 11:15", "2021-03-30 11:20", "2021-03-30 11:25",
"2021-03-30 11:30", "2021-03-30 11:35", "2021-03-30 11:40", "2021-03-30 11:45"
), Trial = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), WalchemTempTank29_Avg = c("18.8",
"18.67", "18.58", "18.48", "18.38", "18.29", "18.2", "18.12",
"18.03", "18"), WalchemTempTank29_Std = c("0.037", "0.025", "0.032",
"0.029", "0.017", "0.018", "0.026", "0.025", "0.024", "0.023"
), pH_Tank40_Avg = c("7.859", "7.863", "7.868", "7.866", "7.863",
"7.864", "7.865", "7.867", "7.869", "7.87"), pH_Tank40_Std = c("0.007",
"0.006", "0.002", "0.001", "0.002", "0.001", "0.002", "0.001",
"0.002", "0.004"), WalchemTempTank13_Avg = c("10.26", "10.22",
"10.21", "10.24", "10.27", "10.3", "10.32", "10.34", "10.37",
"10.4"), WalchemTempTank13_Std = c("0.01", "0.013", "0.005",
"0.01", "0.007", "0.006", "0.006", "0.008", "0.008", "0.005")), row.names = 4:13, class = "data.frame")
但是现在,根据 QC 表,我需要删除一些行(日期/时间)或为其设置子集,但仅限于特定列(即包含 data_type_tank 的那些列)。我想我可以手动执行此操作,使用下面的代码,然后在需要的地方绑定或连接列/行,但这似乎是一个艰巨的过程。
subset_row_1_QC_table <- dataframe %>% select(Measurement.time, contains("WalchemTempTank29")) %>%
subset(Measurement.time >= as.POSIXct("2021-03-31 08:30") & Measurement.time <= as.POSIXct("2021-03-31 18:00"))
是否有任何方法可以根据不同数据框中的列自动执行此过程,删除或子集特定于列的行?我认为理想情况下我的数据框看起来像一个扩展版本,例如:
| Measurement.time | Trial | WaterTempTank29_Avg | WaterTempTank29_Std | pH_Tank40_Avg | pH_Tank40_Std |
|---|---|---|---|---|---|
| 2021-03-31 08:30 | 1 | 18.8 | 0.037 | NA | NA |
| [all 5-min intervals] | NA | NA | |||
| 2021-03-31 18:00 | 1 | 18.36 | 0.023 | NA | NA |
| 2021-03-31 07:50 | 1 | NA | NA | 7.854 | 0.001 |
| [all 5-min intervals] | 1 | NA | NA | 7.88 | 0.001 |
| 2021-03-31 08:15 | 1 | NA | NA | 7.84 | 0.001 |
| 2021-03-31 10:25 | 1 | NA | NA | 7.881 | 0.001 |
| [all 5-min intervals] | 1 | NA | NA | 7.804 | 0.001 |
| 2021-03-31 10:40 | 1 | NA | NA | 7.881 | 0 |
任何帮助将不胜感激!我希望我能够正确解释我的问题,StackOverflow 的第一次用户。
干杯,
编辑:感谢 r2evans 和 GuedesBF -- 希望现在更好/修复。
【问题讨论】:
-
请提供数据的代码,而不是链接。使用
dput(data) -
请不要发布代码/数据/错误的图像:它会破坏屏幕阅读器并且无法复制或搜索(参考:meta.stackoverflow.com/a/285557 和 xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,
data.frame(...)或来自dput(head(x))的输出)。
标签: r time-series subset multiple-columns