我很难转动成对的柱子。我理解有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谢谢你的帮助。
发布于 2021-10-07 18:32:53
我们可以使用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.58https://stackoverflow.com/questions/69486185
复制相似问题