r - 如何在 R 中旋转成对的列?
问题描述
我在旋转成对列时遇到困难。我知道有names_pattern
争论,我无法弄清楚如何使这项工作。
我的数据如下所示:
structure(list(Q8_1_avg = 4.72562264837839, Q8_1_avg_se = 0.0595342202500642,
Q8_1_unweighted = 4.90473815461347, Q8_2_avg = 4.65508494735021,
Q8_2_avg_se = 0.0541589332376175, Q8_2_unweighted = 4.6498753117207,
Q8_3_avg = 5.4756060523178, Q8_3_avg_se = 0.0534895224170486,
Q8_3_unweighted = 5.57506234413965), row.names = c(NA, -1L
), class = "data.frame")->dat
我想要的输出如下所示:
df<-data.frame(
Question=c('Q8_1', 'Q8_2','Q8_3'),
#Values taken from Q8_[123]_avg
Weighted_Average=c(4.72,4.65, 5.47),
#Values taken from Q8_[123]_avg_se
Weighted_SE=c(0.05,0.05 ,0.05),
#Values taken from Q8_[123]_unweighted
Unweighted_Average=c(4.90, 4.64, 5.57)
)
df
感谢您提供任何帮助。
解决方案
我们可以使用pivot_longer
. 如果需要,可rename
用于更改列名。将 指定names_to
为“问题”的向量(返回列名的前缀部分)并.value
以长格式返回值。然后,在 中names_pattern
,捕获前缀部分,即一个或多个字符不是_
( [^_]+
),后跟_
一些数字 ( \\d+
) 作为一个组 ( (...)
),然后_
是第二个捕获组,涉及其余字符 ( (.*)
)
library(dplyr)
library(tidyr)
dat %>%
pivot_longer(cols = everything(), names_to = c("Question",
".value"), names_pattern = "^([^_]+_\\d+)_(.*)")
# A tibble: 3 × 4
Question avg avg_se unweighted
<chr> <dbl> <dbl> <dbl>
1 Q8_1 4.73 0.0595 4.90
2 Q8_2 4.66 0.0542 4.65
3 Q8_3 5.48 0.0535 5.58
推荐阅读
- java - Spring安全和oauth2认证问题
- python - 如何在时域(x 轴)中缩放时间序列数据?
- r - 将月度数据汇总为季度(平均值)
- javascript - 测试javascript代码时如何解决Nodejs中的断言问题?
- javascript - jQuery Promise wait tp 为一个 Item 迭代一个数组,如果找到 item 则返回
- node.js - 使用 Jest 测试在节点 API 中进行的调用
- singularity-container - 在容器中创建主目录失败
- python - 计算具有哈希的剧集数
- angular - Angular:npm install 返回“对等依赖项”警告,对等依赖项不兼容
- python - How to rotate pymunk joints at will?