有没有一个通用的方法可以将十字桌转换成长桌?
我做了下面的表来说明,在真实的情况下,它有7个水平变量和9个垂直变量,所有的变量都可以重复,但只有(verticle_var,horiz_var)的唯一组合
cross_table <- matrix(c(c(NA, NA, "Monday", "Monday", "Tuesday", "Tuesday"),
c(NA, NA, "AM", "PM", "AM", "PM"),
c("Store1", "Item1", 1, 2, 1, 3),
c("Store1", "Item3", 2, 5, 1, 6),
c("Store2", "Item1", 3, 8, 1, 3),
c("Store2", "Item2", 5, 2, 5, 0)), ncol = 6)
| | | 周二|周二| Tuesday | Tuesday |
| --|--|--|--|--|--|
| | | 是|下午| AM | PM |
| Store1| Item1| 1 | 2 | 1 | 3 |
| Store1| Item3| 2 | 5 | 1 | 6 |
| Store2| Item1| 3 | 8 | 1 | 3 |
| Store2| Item2| 5 | 2 | 5 | 0 |
我想把它转换成一个长表,看起来像这样:
t(matrix(c(
c("Store1", "Item1", "Monday", "AM", 1),
c("Store1", "Item1", "Monday", "PM", 1),
c("Store1", "Item1", "Tuesday", "AM", 1),
c("Store1", "Item1", "Tuesday", "PM", 1),
c("Store1", "Item2", "Monday", "AM", NA),
c("Store1", "Item2", "Monday", "PM", NA),
c("Store1", "Item2", "Tuesday", "AM", NA),
c("Store1", "Item2", "Tuesday", "PM", NA),
c("Store1", "Item3", "Monday", "AM", 2),
c("Store1", "Item3", "Monday", "PM", 5),
c("Store1", "Item3", "Tuesday", "AM", 1),
c("Store1", "Item3", "Tuesday", "PM", 6),
c("Store2", "Item1", "Monday", "AM", 3),
c("Store2", "Item1", "Monday", "PM", 8),
c("Store2", "Item1", "Tuesday", "AM", 1),
c("Store2", "Item1", "Tuesday", "PM", 3),
c("Store2", "Item2", "Monday", "AM", 5),
c("Store2", "Item2", "Monday", "PM", 2),
c("Store2", "Item2", "Tuesday", "AM", 5),
c("Store2", "Item2", "Tuesday", "PM", 0),
c("Store2", "Item3", "Monday", "AM", NA),
c("Store2", "Item3", "Monday", "PM", NA),
c("Store2", "Item3", "Tuesday", "AM", NA),
c("Store2", "Item3", "Tuesday", "PM", NA)),ncol = 24))
| storeId| ItemID|天|时间|销售|
| --|--|--|--|--|
| Store1| Item1|周一|是| 1 |
| Store1| Item1|周一|下午| 2 |
| Store1| Item1|周二|是| 1 |
| Store1| Item1|周二|下午| 3 |
| Store1| Item2|周一|是|NA|
| Store1| Item2|周一|下午|NA|
| Store1| Item2|周二|是|NA|
| Store1| Item2|周二|下午|NA|
| Store1| Item3|周一|是| 2 |
| Store1| Item3|周一|下午| 5 |
| Store1| Item3|周二|是| 1 |
| Store1| Item3|周二|下午| 6 |
| Store2| Item1|周一|是| 3 |
| Store2| Item1|周一|下午| 8 |
| Store2| Item1|周二|是| 1 |
| Store2| Item1|周二|下午| 3 |
| Store2| Item2|周一|是| 5 |
| Store2| Item2|周一|下午| 2 |
| Store2| Item2|周二|是| 5 |
| Store2| Item2|周二|下午| 0 |
| Store2| Item3|周一|是|NA|
| Store2| Item3|周一|下午|NA|
| Store2| Item3|周二|是|NA|
| Store2| Item3|周二|下午|NA|
我如何才能做到这一点?
不知如何开始
3条答案
按热度按时间y3bcpkx11#
生产
0g0grzrc2#
你可以使用tidyr包中的pivot_longer函数来归档:
voase2hg3#
由于daya来自于一个excel表,所以使用
tidyxl
和unpivotr
函数可能更容易。给定以下excelfile
Map1.xlsx
使用以下代码:
以输出