如何在 R 中旋转成对的列?
How do I pivot pairs of columns in 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
指定为 'Question'(其中 return 列名称的前缀部分)和 .value
return 长格式值的向量。然后,在 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
我很难旋转成对的列。我知道有 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
指定为 'Question'(其中 return 列名称的前缀部分)和 .value
return 长格式值的向量。然后,在 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