[解决方案]我找到了解决问题的方法。
require(data.table)
dt <- data.table(dataframe)
newdt<-dt[, number := 1:.N, by = Date]
data<-as.data.frame(newdt)
data_wide <- reshape(newdt, direction="wide", idvar = "Date", timevar = "number")
data_wide
6/26/2015 209.3 230.2 80.4 s2
6/27/2015 209.1 227.2 239.2 s2
编辑2:我认为如果我能弄清楚如何在原始数据框中创建一个标签行数(或者有效值)中的新列,其他人提供的解决方案就可以了变量1)每个日期。换句话说,我想在每次更改日期时重新开始标记行。例如,
6/26/2015 1 209.3
6/26/2015 2 230.2
6/26/2015 3 80.4
6/26/2015 4 s2
6/27/2015 1 ....
然后我可以使用其他帖子中描述的重塑方法。
编辑:这接近How to reshape data from long to wide format?,但是为了使这些答案适合我的数据,我需要一个新的列,每天为变量分配一个1长度的变量1,我没有。
换句话说,如果我使用
data_wide <- reshape(data,direction="wide", idvar = "Date", timevar = "Variable 1")
data_wide
然后,因为变量1有200多个唯一条目,data_wide每个日期有200多列,其中大多数是na,因为变量1的值通常只存在于数据中的单个日期,而数据是一个超过5000个日期的时间序列。 ~~~~~~~~~~~~
我有一个数据框,第1列= Date
,第2列= Variable 1
,其中变量1通常是数字。 E.g。
6/26/2015 209.3
6/26/2015 230.2
6/26/2015 80.4
6/26/2015 s2
6/27/2015 209.1
6/27/2015 227.2
6/27/2015 239.2
6/27/2015 s2
我希望能够使用新值标记行,该值只是该日期的行号。
6/26/2015 209.3 1
6/26/2015 230.2 2
6/26/2015 80.4 3
6/26/2015 s2 4
6/27/2015 209.1 1
6/27/2015 227.2 2
6/27/2015 239.2 3
6/27/2015 s2 4
[原帖]
我有一个数据框,第1列= Date
,第2列= Variable 1
,其中变量1通常是数字。 E.g。
6/26/2015 209.3
6/26/2015 230.2
6/26/2015 80.4
6/26/2015 s2
6/27/2015 209.1
6/27/2015 227.2
6/27/2015 239.2
6/27/2015 s2
6/28/2015 230.2
6/28/2015 228.2
6/28/2015 36.4
6/28/2015 s2
6/29/2015 209.3
6/29/2015 15.3
6/29/2015 15.4
6/29/2015 s2
我希望能够&#34;转置&#34;数据使每个日期都有自己的行,同一日期的每个变量都在同一行。 E.g。
6/26/2015 209.3 230.2 80.4 s2
6/27/2015 209.1 227.2 239.2 s2
等等。虽然此示例显示每个日期变量1的条目数相同,但情况并非总是如此。我希望能够允许将任意数量的变量折叠到日期。
一个复杂的因素是实际上还有两列,变量2和变量3,它们在一个日期内是常量,但可能在两个日期之间变化。我希望那些也可以折叠到日期,但我只需要在新数据框中为每个变量添加一列。
我尝试过使用dcast和reshape函数,但这些函数没有给出预期的结果。有没有人有建议?
答案 0 :(得分:1)
这最好通过tapply
处理:类似
tapply(data$`Variable 1`, data$date, c)
创建一个参差不齐的数组。不规则数组的类型与您对预期结果的描述相匹配。请注意,原始订单可能会丢失,但您可以通过(例如)按日期排序来恢复合理的订单。
您不能(明智地)将结果转换为合法数据框,因为您的数据类型意味着每行可变数量的列。数据框不适用于此用途,如果以这种方式处理,您将立即遇到更多问题。
或者,原始稀疏矩阵有多少NA有什么问题?这是您正在讨论的数据类型的另一个有效表示。
如果您只对有效值的计数感兴趣,请执行以下操作:
aggregate(data=data,`Variable 1`~Date,length)
对于mtcars数据集,会发生这种情况:
aggregate(data=mtcars,wt~cyl,length)
cyl wt
1 4 11
2 6 7
3 8 14
请注意,wt只是一个值的计数,它不关心wt的类型或值,只关心它的数量(长度)。
答案 1 :(得分:0)
此解决方案采用数据框,其中第1列包含为多行重复的日期值,第2列包含每行的值。目标是建立一个新的数据框,其中第1列不包含重复日期,每行(日期)包含第2列中列出的所有值,主要是缩短日期并将第2列转换为日期。要使用重塑进行此操作,首先,同一日期的每个值都需要一个数字。
require(data.table)
dt <- data.table(dataframe)
newdt<-dt[, number := 1:.N, by = Date]
data<-as.data.frame(newdt)
data_wide <- reshape(newdt, direction="wide", idvar = "Date", timevar = "number")
data_wide
6/26/2015 209.3 230.2 80.4 s2
6/27/2015 209.1 227.2 239.2 s2