如何重塑我的数据框以与 R 中的 cor() 一起使用?
How can I reshape my data frame to be used with cor() in R?
我不熟悉 R 和数据整理。
我想使用 cor() 函数计算相关矩阵,为此我必须重塑我的数据框。它由一个在线商店的 1500 种不同的文章 (StockCodes) 组成,每篇文章的销售历史为 365 天(每个 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 循环实现了这一点(并成功计算了我的相关矩阵),但是循环执行了 "ages"(大约 4 小时)。
有没有合适又快捷的方法?
非常感谢任何帮助!
这是使用 tidyr
中的 pivot_wider
的方法:
my_df %>%
pivot_wider(names_from = Stockcode, values_from = Quantity) %>% ## pivot columns in wide format
column_to_rownames(var = "Date") ## convert Date column to row names
# A B C
#2010-12-01 1 3 1
#2010-12-02 5 2 4
我不熟悉 R 和数据整理。 我想使用 cor() 函数计算相关矩阵,为此我必须重塑我的数据框。它由一个在线商店的 1500 种不同的文章 (StockCodes) 组成,每篇文章的销售历史为 365 天(每个 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 循环实现了这一点(并成功计算了我的相关矩阵),但是循环执行了 "ages"(大约 4 小时)。
有没有合适又快捷的方法?
非常感谢任何帮助!
这是使用 tidyr
中的 pivot_wider
的方法:
my_df %>%
pivot_wider(names_from = Stockcode, values_from = Quantity) %>% ## pivot columns in wide format
column_to_rownames(var = "Date") ## convert Date column to row names
# A B C
#2010-12-01 1 3 1
#2010-12-02 5 2 4