在 R 中的数据框中将数据从行重塑为列
Reshape data from rows to column in dataframe in R
我想重塑数据框中的以下形式的数据:
a b Type_c d e
1 1 0 10 9
2 1 0 20 9
3 2 1 30 4
4 2 2 40 3
5 3 3 50 2
6 3 0 60 1
7 4 3 70 2
8 4 2 80 7
9 4 2 90 8
并希望通过整形或转换得到以下格式的数据。
a b Type_0_d Type_0_e Type_1_d Type_1_e type_2_d type_2_e type_3_d type_3_e
1 1 10 9 0 0 0 0 0 0
2 1 20 9 0 0 0 0 0 0
3 2 0 0 30 4 0 0 0 0
4 2 0 0 0 0 40 3 0 0
5 3 0 0 0 0 0 0 50 2
6 3 60 1 0 0 0 0 0 0
7 4 0 0 0 0 0 0 70 2
8 4 0 0 0 0 80 7 0 0
9 4 0 0 0 0 90 8 0 0
我发现在 R 中做同样的事情并不困难。但是,在 Tableau 中它很简单。只是想知道是否有一种方法可以在 R 中有效地做同样的事情。
我们可以使用 data.table
中的 dcast
,它可以包含多个 value.var
列
library(data.table)
dcast(setDT(df1), a+b ~paste0("Type_", Type_c), value.var = c("d", "e"), fill = 0)
另一个选项可能使用 tidyr
包的 spread
library(dplyr)
library(tidyr)
df1 %>% mutate(e1=Type_c) %>% spread(key = Type_c,value = d,fill = 0) %>% spread(key =e1,value = e,fill = 0)
我知道这是一个糟糕的解决方案,但它仍然可以正常工作。欢迎任何有关修改代码的建议。还有一件事我们必须正确重命名列。
我想重塑数据框中的以下形式的数据:
a b Type_c d e
1 1 0 10 9
2 1 0 20 9
3 2 1 30 4
4 2 2 40 3
5 3 3 50 2
6 3 0 60 1
7 4 3 70 2
8 4 2 80 7
9 4 2 90 8
并希望通过整形或转换得到以下格式的数据。
a b Type_0_d Type_0_e Type_1_d Type_1_e type_2_d type_2_e type_3_d type_3_e
1 1 10 9 0 0 0 0 0 0
2 1 20 9 0 0 0 0 0 0
3 2 0 0 30 4 0 0 0 0
4 2 0 0 0 0 40 3 0 0
5 3 0 0 0 0 0 0 50 2
6 3 60 1 0 0 0 0 0 0
7 4 0 0 0 0 0 0 70 2
8 4 0 0 0 0 80 7 0 0
9 4 0 0 0 0 90 8 0 0
我发现在 R 中做同样的事情并不困难。但是,在 Tableau 中它很简单。只是想知道是否有一种方法可以在 R 中有效地做同样的事情。
我们可以使用 data.table
中的 dcast
,它可以包含多个 value.var
列
library(data.table)
dcast(setDT(df1), a+b ~paste0("Type_", Type_c), value.var = c("d", "e"), fill = 0)
另一个选项可能使用 tidyr
包的 spread
library(dplyr)
library(tidyr)
df1 %>% mutate(e1=Type_c) %>% spread(key = Type_c,value = d,fill = 0) %>% spread(key =e1,value = e,fill = 0)
我知道这是一个糟糕的解决方案,但它仍然可以正常工作。欢迎任何有关修改代码的建议。还有一件事我们必须正确重命名列。