r - R将列名转换为行
问题描述
这是我的数据框:
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
推荐阅读
- python - Flask + sqlalchemy 证书验证失败:IP 地址不匹配
- android - 静态图像作为 AVD 管理器中的假相机输入
- python - 如何在 Eager 模式下分析 TensorFlow 1.15 内存分配
- twilio - twlio 中通知服务的绑定计数
- docker - Kubernetes 没有从 JFrog 私有注册表中提取图像
- flutter - 我有两个必须互相倾听的集团,我如何将一个作为参数传递给另一个?
- matplotlib - jupyter notebook matplotlib 显示绘图,然后在原图上绘图
- pandas - 比较字符串时的 PValueError 在熊猫数据框中
- c# - 如何在按钮按下统一时缓慢添加到对象 Z 比例
- javascript - 通过 POST 将数据从 javascript 传递到 PHP 不起作用