【发布时间】:2026-02-05 09:00:01
【问题描述】:
我有一个这样的数据框
Tag Date (DD/MM/YYYY)
AA 1/1/2010
AB 2/1/2010
AC 3/1/2010
AA 4/1/2010
AB 5/1/2010
AA 6/1/2010
AB 7/1/2010
AC 8/1/2010
现在,不同标签的数量是有限的(平均少于 10 个)。我需要的是以更舒适的方式处理数据。我已经分析了 Tag 序列数据以找出更频繁的重复模式,在本例中为 (AA,AB,AC)。
现在,我想要将数据转换成这样的形式,以便我可以对其进行操作。
AA AB AC
1/1/2010 2/1/2010 3/1/2010
4/1/2010 5/1/2010 NA
6/1/2010 7/1/2010 8/1/2010
我已经看到了这个问题,Turning field values into column names in an R data frame,它与我所需要的非常接近。这样做
>libray(reshape2)
>df<-sqldf("SELECT Tag, Date FROM validData")
>head(dcast(df,Date~Tag))
产量
Using Date as value column: use value_var to override.
Aggregation function missing: defaulting to length
Date AF687A AVISOO B32D76 B3DC39 B52C72 DF7EAD DF8E83 DFA521 DFA91A
1 2010-12-23 09:18:50 0 0 0 0 1 0 0 0 0
2 2010-12-23 09:18:52 1 0 0 0 0 0 0 0 0
3 2010-12-23 09:18:54 0 0 0 0 1 0 0 0 0
4 2010-12-23 09:18:57 1 0 0 0 0 0 0 0 0
5 2010-12-23 09:18:58 0 0 0 0 1 0 0 0 0
6 2010-12-23 09:19:00 0 0 0 1 0 0 0 0 0
我想我已经很接近了,但我无法弄清楚最后一步,就像我上面描述的压缩表格一样。有什么线索吗?
【问题讨论】:
-
您没有明确提及这一点,但您假设彼此跟随的标签之间存在关系(例如:当第 6 次观察没有标签 AC 时,您在想要的结果中使用 NA)。如果您满足于:标签为“AA”的所有日期,然后是标签为“AB”的所有日期(等等),即使它们的长度不同,任务也会简单得多。你能确认一下你想要哪一个吗?
-
理想情况下,我想要第一个选择,当模式与列表不同时创建一个新行。我知道用命令式语言或类似 PLSQL 的语言比用 R 更容易。但至少我猜第二个选择是一个开始。