[英]Reshaping tables from long to wide format in R
set![]() |
inst![]() |
ind![]() |
color_Blue![]() |
---|---|---|---|
1 ![]() |
0 ![]() |
0 ![]() |
70 ![]() |
1 ![]() |
0 ![]() |
1 ![]() |
60 ![]() |
1 ![]() |
0 ![]() |
2 ![]() |
50 ![]() |
1 ![]() |
1 ![]() |
0 ![]() |
30 ![]() |
1 ![]() |
1 ![]() |
1 ![]() |
20 ![]() |
1 ![]() |
1 ![]() |
2 ![]() |
66 ![]() |
2 ![]() |
0 ![]() |
0 ![]() |
35 ![]() |
2 ![]() |
0 ![]() |
1 ![]() |
22 ![]() |
2 ![]() |
0 ![]() |
2 ![]() |
28 ![]() |
2 ![]() |
1 ![]() |
0 ![]() |
90 ![]() |
2 ![]() |
1 ![]() |
1 ![]() |
47 ![]() |
2 ![]() |
1 ![]() |
2 ![]() |
23 ![]() |
I have data frame looks like this above and I want to convert this to:我的数据框看起来像上面这样,我想将其转换为:
ind![]() |
set![]() |
inst_0 ![]() |
inst_1 ![]() |
inst_2 ![]() |
---|---|---|---|---|
0 ![]() |
1 ![]() |
70 ![]() |
60 ![]() |
50 ![]() |
1 ![]() |
1 ![]() |
30 ![]() |
20 ![]() |
66 ![]() |
2 ![]() |
1 ![]() |
35 ![]() |
22 ![]() |
28 ![]() |
0 ![]() |
2 ![]() |
90 ![]() |
47 ![]() |
23 ![]() |
1 ![]() |
2 ![]() |
.. ![]() |
.. ![]() |
.. ![]() |
2 ![]() |
2 ![]() |
.. ![]() |
.. ![]() |
.. ![]() |
How can I do this transform?我怎样才能做这个转变? I would appreciate any suggestion.
我将不胜感激任何建议。 Thank you so much!
太感谢了!
I have tried some things but did not really work.I have to do the change based on two columns information and that was confusing me.我尝试了一些方法但没有真正起作用。我必须根据两列信息进行更改,这让我很困惑。
You can use pivot_wider()
from tidyr
for reshaping.您可以使用 tidyr 中的
tidyr
pivot_wider()
进行重塑。
library(tidyr)
df %>%
pivot_wider(names_from = ind, values_from = color_Blue, names_prefix = 'inst_')
# # A tibble: 4 × 5
# set inst inst_0 inst_1 inst_2
# <int> <int> <int> <int> <int>
# 1 1 0 70 60 50
# 2 1 1 30 20 66
# 3 2 0 35 22 28
# 4 2 1 90 47 23
df <- read.table(text = "
set inst ind color_Blue
1 0 0 70
1 0 1 60
1 0 2 50
1 1 0 30
1 1 1 20
1 1 2 66
2 0 0 35
2 0 1 22
2 0 2 28
2 1 0 90
2 1 1 47
2 1 2 23", header = TRUE)
data.table data.table
df <- read.table(text = "set inst ind color_Blue
1 0 0 70
1 0 1 60
1 0 2 50
1 1 0 30
1 1 1 20
1 1 2 66
2 0 0 35
2 0 1 22
2 0 2 28
2 1 0 90
2 1 1 47
2 1 2 23", header = T)
library(data.table)
dcast(
data = setDT(df),
formula = inst + set ~ paste0("inst_", ind),
value.var = "color_Blue"
)
#> inst set inst_0 inst_1 inst_2
#> 1: 0 1 70 60 50
#> 2: 0 2 35 22 28
#> 3: 1 1 30 20 66
#> 4: 1 2 90 47 23
Created on 2023-01-19 with reprex v2.0.2创建于 2023-01-19,使用reprex v2.0.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.