使用拆分、剪切和复制功能过滤R中的数据

使用拆分、剪切和复制功能过滤R中的数据,r,R,我有一个如下所示的数据集 date <- strptime(c("2011-09-01 00:00:00","2011-09-01 06:00:00","2011-09-01 12:00:00","2011-09-01 18:00:00","2011-09-02 00:00:00", "2011-09-02 06:00:00","2011-09-02 12:00:00","2011-09-02 18:00:00","2011-09-03 00:00:00","2011-09-03 06:0

我有一个如下所示的数据集

date <- strptime(c("2011-09-01 00:00:00","2011-09-01 06:00:00","2011-09-01 12:00:00","2011-09-01 18:00:00","2011-09-02 00:00:00",
"2011-09-02 06:00:00","2011-09-02 12:00:00","2011-09-02 18:00:00","2011-09-03 00:00:00","2011-09-03 06:00:00","2011-09-03 12:00:00",
"2011-09-03 18:00:00","2011-09-04 00:00:00","2011-09-04 06:00:00","2011-09-04 12:00:00","2011-09-04 18:00:00","2011-09-05 00:00:00",
"2011-09-05 06:00:00","2011-09-05 12:00:00","2011-09-05 18:00:00","2011-09-06 00:00:00"), format ="%Y-%m-%d %H:%M:%S")

volt <- c(7,8,9,10, 7, 8, 9, 10,  6.1, 11.1,  9.1,  10.1, 7, 8,  9, 10, 6.3, 9.4, 1.3, 19.1, 5.6)

sampV <- data.frame(date,volt)
sampV


               date volt
2011-09-01 00:00:00 7
2011-09-01 06:00:00 8
2011-09-01 12:00:00 9
2011-09-01 18:00:00 10
2011-09-02 00:00:00 7
2011-09-02 06:00:00 8
2011-09-02 12:00:00 9
2011-09-02 18:00:00 10
2011-09-03 00:00:00 6.1
2011-09-03 06:00:00 11.1
2011-09-03 12:00:00 9.1
2011-09-03 18:00:00 10.1
2011-09-04 00:00:00 7
2011-09-04 06:00:00 8
2011-09-04 12:00:00 9
2011-09-04 18:00:00 10
2011-09-05 00:00:00 6.3
2011-09-05 06:00:00 9.4
2011-09-05 12:00:00 1.3
2011-09-05 18:00:00 19.1
2011-09-06 00:00:00 5.6

date假设我正确理解了你的问题,这里有一种方法可以使用
split
duplicated

days <- format(sampV$date, '%Y%m%d')
filtered <- split(sampV, days)[! duplicated(split(sampV$volt, days))]
do.call(rbind, filtered)

#                            date volt
# 20110901.1  2011-09-01 00:00:00  7.0
# 20110901.2  2011-09-01 06:00:00  8.0
# 20110901.3  2011-09-01 12:00:00  9.0
# 20110901.4  2011-09-01 18:00:00 10.0
# 20110903.9  2011-09-03 00:00:00  6.1
# 20110903.10 2011-09-03 06:00:00 11.1
# 20110903.11 2011-09-03 12:00:00  9.1
# 20110903.12 2011-09-03 18:00:00 10.1
# 20110905.17 2011-09-05 00:00:00  6.3
# 20110905.18 2011-09-05 06:00:00  9.4
# 20110905.19 2011-09-05 12:00:00  1.3
# 20110905.20 2011-09-05 18:00:00 19.1
# 20110906    2011-09-06 00:00:00  5.6

days您能否更清楚地了解生成的数据集的外观?关于您提供的示例数据,您是说只提取9/2、9/2、9/4和9/5?哦,我是说9/2、9/2和9/4。谢谢!工作起来很有魅力。正是我想要的。很抱歉反应太晚,对于结构不太好的问题,我有一个关于代码的问题。我有一个数据集(大约300000条记录),它会创建很多列表,这些列表会让我的机器速度减慢,尽管它有4个核心和8gb的RAM。你能知道为什么会这样吗?
days <- format(sampV$date, '%Y%m%d')
filtered <- split(sampV, days)[! duplicated(split(sampV$volt, days))]
do.call(rbind, filtered)

#                            date volt
# 20110901.1  2011-09-01 00:00:00  7.0
# 20110901.2  2011-09-01 06:00:00  8.0
# 20110901.3  2011-09-01 12:00:00  9.0
# 20110901.4  2011-09-01 18:00:00 10.0
# 20110903.9  2011-09-03 00:00:00  6.1
# 20110903.10 2011-09-03 06:00:00 11.1
# 20110903.11 2011-09-03 12:00:00  9.1
# 20110903.12 2011-09-03 18:00:00 10.1
# 20110905.17 2011-09-05 00:00:00  6.3
# 20110905.18 2011-09-05 06:00:00  9.4
# 20110905.19 2011-09-05 12:00:00  1.3
# 20110905.20 2011-09-05 18:00:00 19.1
# 20110906    2011-09-06 00:00:00  5.6