【发布时间】:2020-01-17 15:20:56
【问题描述】:
我对 R 和数据争论很陌生。 我想使用 cor() 函数计算相关矩阵,为此我必须重塑我的数据框。它由在线商店的 1500 篇不同文章 (StockCodes) 组成,每篇文章的销售历史为 365 天(Quantity per Date per StockCode)。
我需要以 Dates 成为新的行名,StockCodes 成为新的列名的形式对其进行重塑。
考虑这个简短的例子:
my_df <- data.frame(Stockcode = c("A","A", "B","B", "C", "C"), Quantity = c(1,5,3,2,1,4), Date = c("2010-12-01","2010-12-02","2010-12-01","2010-12-02","2010-12-01","2010-12-02") )
看起来像这样:
Stockcode Quantity Date
1 A 1 2010-12-01
2 A 5 2010-12-02
3 B 3 2010-12-01
4 B 2 2010-12-02
5 C 1 2010-12-01
6 C 4 2010-12-02
而且我希望它变成:
df_reshaped <- data.frame(A = c(1,5), B = c(3,2), C = c(1,4), row.names = c("2010-12-01","2010-12-02"))
看起来像这样:
A B C
2010-12-01 1 3 1
2010-12-02 5 2 4
我通过 for 循环实现了这一点(并成功计算了我的相关矩阵),但循环需要“年龄”才能执行(大约 4 小时)。
有没有合适更快捷的方法?
我将非常感谢任何帮助!
【问题讨论】:
-
试试
reshape(my_df, idvar = "Date", timevar = "Stockcode", direction = "wide", new.row.names = unique(my_df$Date))[, -1]或者unstack(my_df[, 1:2], Quantity ~ Stockcode) -
谢谢! “unstack”的工作原理非常快 - 它稍微改变了列名并删除了发票日期/将其替换为 id。但对于相关矩阵,这无关紧要。 :-)
标签: r dataframe reshape correlation