R将列名转换为行
R convert column names into rows
这是我的数据框:
structure(list(alpha = c(0.1, 0.5), w = c(-0.00274974306224061,
-0.000196166328114611), w_sd = c(0.0551810481758757, 0.0578592391790738
), x = c(33.1362337290378, 39.5506108643837), x_sd = c(3.1665690944253,
3.326430870477), y = c(-5.31333502177223e-05, 0.000993858599634651
), y_sd = c(0.00281795557473473, 0.00521256102447982), z = c(7.36644492272648,
0.948467218571388), z_sd = c(3.51648260725539, 3.66294238952056
)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))
我希望它看起来像这样:
alpha | stock | mean | sd
0.1 | x
0.5 | x
0.1 | y
0.5 | y
0.1 | z
0.5 | z
0.1 | z
0.5 | z
其中 mean 和 sd 列分别包含 w
、x
等和 w_sd
、x_sd
等的值。
编辑:请注意,“alpha”是通过参数 parameter
.
对函数的输入
希望这就是您要找的:
- 我首先不得不对您的列名称进行轻微修改,其中只有一个字母,因为我们需要它们作为
mean
值,然后它们将类似于您的其他列
- 然后我创建了新的列名称,一个
stock
用于存储所有前缀字母,另外两个由 .value
参数指定,以便名称的一部分 sd
或 mean
将被定义为包含单元格值的变量
library(tidyr)
df %>%
rename_with(~ gsub("([[:alpha:]])", "\1_mean", .), !contains("sd") & !c(1)) %>%
pivot_longer(!alpha, names_to = c("stock", ".value"),
names_pattern = "([[:alpha:]])_(.*)")
# A tibble: 8 x 4
alpha stock mean sd
<dbl> <chr> <dbl> <dbl>
1 0.1 w -0.00275 0.0552
2 0.1 x 33.1 3.17
3 0.1 y -0.0000531 0.00282
4 0.1 z 7.37 3.52
5 0.5 w -0.000196 0.0579
6 0.5 x 39.6 3.33
7 0.5 y 0.000994 0.00521
8 0.5 z 0.948 3.66
这是我的数据框:
structure(list(alpha = c(0.1, 0.5), w = c(-0.00274974306224061,
-0.000196166328114611), w_sd = c(0.0551810481758757, 0.0578592391790738
), x = c(33.1362337290378, 39.5506108643837), x_sd = c(3.1665690944253,
3.326430870477), y = c(-5.31333502177223e-05, 0.000993858599634651
), y_sd = c(0.00281795557473473, 0.00521256102447982), z = c(7.36644492272648,
0.948467218571388), z_sd = c(3.51648260725539, 3.66294238952056
)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))
我希望它看起来像这样:
alpha | stock | mean | sd
0.1 | x
0.5 | x
0.1 | y
0.5 | y
0.1 | z
0.5 | z
0.1 | z
0.5 | z
其中 mean 和 sd 列分别包含 w
、x
等和 w_sd
、x_sd
等的值。
编辑:请注意,“alpha”是通过参数 parameter
.
希望这就是您要找的:
- 我首先不得不对您的列名称进行轻微修改,其中只有一个字母,因为我们需要它们作为
mean
值,然后它们将类似于您的其他列 - 然后我创建了新的列名称,一个
stock
用于存储所有前缀字母,另外两个由.value
参数指定,以便名称的一部分sd
或mean
将被定义为包含单元格值的变量
library(tidyr)
df %>%
rename_with(~ gsub("([[:alpha:]])", "\1_mean", .), !contains("sd") & !c(1)) %>%
pivot_longer(!alpha, names_to = c("stock", ".value"),
names_pattern = "([[:alpha:]])_(.*)")
# A tibble: 8 x 4
alpha stock mean sd
<dbl> <chr> <dbl> <dbl>
1 0.1 w -0.00275 0.0552
2 0.1 x 33.1 3.17
3 0.1 y -0.0000531 0.00282
4 0.1 z 7.37 3.52
5 0.5 w -0.000196 0.0579
6 0.5 x 39.6 3.33
7 0.5 y 0.000994 0.00521
8 0.5 z 0.948 3.66