无法使用不同的数据类型从长到长进行更大范围的分布/透视 [英] Having trouble with spread/pivot wider from long with varying data types
本文介绍了无法使用不同的数据类型从长到长进行更大范围的分布/透视的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
tst <- data.frame(ID = c(123, 123, 123, 124, 124, 124),
Identifier = c("S2", "S2", "S5", "S3", "S2", "S2"),
Speed = c(15,24,11,34,13,15),
Box_loc = c(801,802,803,801,802,803),
Ord = c(86,87,90,81,82,84))
我一直试图将上述数据从长格式转换为宽格式,但每当我尝试自己研究它时,数据看起来不够相似,以至于我无法正确转换它。这看起来应该是一个简单的解决方案,但也许我遗漏了一些关键的细节。
ID | 标识符(801) | 速度(801) | Ord(801) | 标识符(802) | 速度(802) | Ord(802) | 标识符(803) | 速度(803) | Ord(803) |
---|---|---|---|---|---|---|---|---|---|
123 | s2 | 15 | 86 | s2 | 24 | 87 | s5 | 11 | 90 |
124 | S3 | 34 | 81 | s2 | 13 | 82 | s2 | 15 | 84 |
我想让我的数据看起来像这个表。实际数据不止有2个ID(如果这很重要),并且头中的数字是Box_loc。换句话说,对于每个Box_loc,都有123-250之间的ID,每个ID都需要具有这些列的自己的行。我的实际文件大约有10列,但语法应该大致相同。
推荐答案
您可以使用以下解决方案:
library(tidyr)
tst %>%
pivot_wider(names_from = Box_loc,
values_from = !c(ID, Box_loc),
names_glue = "{.value}({Box_loc})")
# A tibble: 2 x 10
ID `Identifier(801)` `Identifier(802)` `Identifier(803)` `Speed(801)` `Speed(802)`
<dbl> <chr> <chr> <chr> <dbl> <dbl>
1 123 S2 S2 S5 15 24
2 124 S3 S2 S2 34 13
# ... with 4 more variables: Speed(803) <dbl>, Ord(801) <dbl>, Ord(802) <dbl>, Ord(803) <dbl>
这篇关于无法使用不同的数据类型从长到长进行更大范围的分布/透视的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文