R,通过提取前缀从宽到长旋转。整齐划一
Posted
技术标签:
【中文标题】R,通过提取前缀从宽到长旋转。整齐划一【英文标题】:R, pivoting wide to long with extracting prefixes. In tidy way 【发布时间】:2022-01-20 15:27:18 【问题描述】:我想我正在做的事情几乎与这个问题完全一样:reshape wide to long using prefix as id in R
但如果可能的话,我很想使用 tidyverse。
我有这个数据。这些列是两组几乎相同的变量,前面有一个“pre”或“post”。
data<-structure(list(PreConfidence_NonMarginal = c(3, 1, 2, 4, 4, 5,
5, 4, 4, 5, 5, 1, 2, 3, 3, 4, 3, 4), PreConfidenceMarginal = c(1,
1, 1, 3, 3, 4, 4, 4, 4, 4, 2, 1, 1, 1, 2, 3, 2, 1), PreConfidenceInstruments = c(3,
2, 2, 5, 4, 5, 5, 4, 4, 5, 5, 1, 3, 3, 3, 4, 3, 3), PreConfidenceSutures = c(2,
1, 2, 4, 2, 5, 3, 4, 4, 4, 5, 1, 2, 2, 3, 4, 3, 3), PreFamiliarAnatomy = c(3,
3, 2, 5, 3, 4, 4, 4, 4, 5, 4, 1, 2, 3, 3, 3, 2, 3), PreEfficient = c(1,
1, 1, 3, 3, 3, 3, 4, 3, 4, 5, 1, 1, 1, 4, 3, 2, 3), PostConfidence_NonMarginal = c(4,
3, 3, 4, 4, 5, 5, 4, 5, 5, 5, 3, 3, 3, 4, 4, 4, 4), PostConfidenceMarginal = c(2,
2, 2, 4, 4, 4, 4, 4, 5, 4, 3, 3, 1, 3, 4, 3, 3, 3), PostConfidenceInstruments = c(3,
3, 4, 5, 4, 5, 4, 4, 5, 5, 5, 3, 3, 3, 5, 4, 4, 3), PostConfidenceSutures = c(3,
3, 4, 4, 3, 5, 3, 5, 5, 4, 5, 3, 3, 3, 5, 4, 3, 3), PostFamiliarAnatomy = c(3,
4, 2, 5, 3, 4, 4, 4, 4, 5, 4, 3, 3, 3, 4, 4, 3, 4), PostEfficient = c(2,
2, 2, 4, 3, 4, 4, 5, 3, 4, 5, 3, 2, 3, 4, 4, 2, 4)), row.names = c(NA,
-18L), class = c("tbl_df", "tbl", "data.frame"))
而且我希望旋转更长的时间,以便列是“pre”和“post”,而变量名的其余部分作为新的行标题。理想情况下,结果应该是这样的:
任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:我们可以使用 pivot_longer
和 names_pattern
- 捕获前缀部分(Pre
或 Post
)和其余字符(.*)
,同时将 names_to
指定为 ".value"
的向量- “问题”列中列的值和列名的后缀部分
library(dplyr)
library(tidyr)
data %>%
pivot_longer(cols = everything(),
names_to = c(".value", "Question"), names_pattern = "(Pre|Post)(.*)")
-输出
# A tibble: 108 × 3
Question Pre Post
<chr> <dbl> <dbl>
1 Confidence_NonMarginal 3 4
2 ConfidenceMarginal 1 2
3 ConfidenceInstruments 3 3
4 ConfidenceSutures 2 3
5 FamiliarAnatomy 3 3
6 Efficient 1 2
7 Confidence_NonMarginal 1 3
8 ConfidenceMarginal 1 2
9 ConfidenceInstruments 2 3
10 ConfidenceSutures 1 3
# … with 98 more rows
【讨论】:
以上是关于R,通过提取前缀从宽到长旋转。整齐划一的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)如果没有指定行标识符号,则所有的字段都会放入variable变量中
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)指定行标识符变量并自定义生成的长表的标识符列的名称