r - 如何根据R中的类别将长格式转换为宽格式
问题描述
我有以下数据。
name x1 x2 x3 x4
1 V1_3 1 0 999 999
2 V2_3 1.12 0.044 25.4 0
3 V3_3 0.917 0.045 20.4 0
4 V1_15 1 0 999 999
5 V2_15 1.07 0.036 29.8 0
6 V3_15 0.867 0.039 22.5 0
7 V1_25 1 0 999 999
8 V2_25 1.07 0.034 31.1 0
9 V3_25 0.917 0.037 24.6 0
10 V1_35 1 0 999 999
11 V2_35 1.05 0.034 31.2 0
12 V3_35 0.994 0.037 26.6 0
13 V1_47 1 0 999 999
14 V2_47 1.03 0.031 33.6 0
15 V3_47 0.937 0.034 27.4 0
16 V1_57 1 0 999 999
17 V2_57 1.13 0.036 31.9 0
18 V3_57 1.03 0.037 28.1 0
我想将此数据转换为以下数据。有人可以给我一些建议吗?
name est_3 est_15 est_25 est_35 est_47 est_57
1 V2 1.12 1.07 1.07 1.05 1.03 1.13
2 V3 0.917 0.867 0.917 0.994 0.937 1.03
解决方案
这是适合您的一种方法。您的数据在此处调用mydf
。首先,您要使用 选择必要的列(即name
和x1
)select()
。然后,您想使用filter()
. 您想抓取以字符串开头V2
或V3
以字符串开头的行。grepl()
检查每个字符串是否具有模式。然后,您要拆分列,name
并创建两列(即name
和est
)。最后,您想使用pivot_wider()
.
library(dplyr)
library(tidyr)
select(mydf, name:x1) %>%
filter(grepl(x = name, pattern = "^V[2|3]")) %>%
separate(col = name, into = c("name", "est"), sep = "_") %>%
pivot_wider(names_from = "est",values_from = "x1", names_prefix = "est_")
# name est_3 est_15 est_25 est_35 est_47 est_57
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 V2 1.12 1.07 1.07 1.05 1.03 1.13
#2 V3 0.917 0.867 0.917 0.994 0.937 1.03
供您参考,当您提出问题时,您希望提供最少的示例数据和代码。如果你能做到这一点,那么 SO 用户可以轻松地帮助你。请阅读这个问题。
数据
mydf <- structure(list(name = c("V1_3", "V2_3", "V3_3", "V1_15", "V2_15",
"V3_15", "V1_25", "V2_25", "V3_25", "V1_35", "V2_35", "V3_35",
"V1_47", "V2_47", "V3_47", "V1_57", "V2_57", "V3_57"), x1 = c(1,
1.122, 0.917, 1, 1.069, 0.867, 1, 1.066, 0.917, 1, 1.048, 0.994,
1, 1.03, 0.937, 1, 1.133, 1.032), x2 = c(0, 0.044, 0.045, 0,
0.036, 0.039, 0, 0.034, 0.037, 0, 0.034, 0.037, 0, 0.031, 0.034,
0, 0.036, 0.037), x3 = c(999, 25.446, 20.385, 999, 29.751, 22.478,
999, 31.134, 24.565, 999, 31.18, 26.587, 999, 33.637, 27.405,
999, 31.883, 28.081), x4 = c(999, 0, 0, 999, 0, 0, 999, 0, 0,
999, 0, 0, 999, 0, 0, 999, 0, 0)), row.names = c(NA, -18L), class = c("tbl_df",
"tbl", "data.frame"))
推荐阅读
- angular - 微前端,使用 Angular 框架作为外部
- java - 如何使用 EWS Java 在 ItemAttachment 中获取附件
- ocaml - OCaml 中是否有检测类型的通用打印机?
- javascript - Vue Axios 检索列表中对象的响应 ID
- javascript - 记忆一个咖喱函数
- javascript - 隐藏内容时使 div 跳转更平滑
- css - 如何覆盖两个相同宽度但不同高度的图像,一个固定,另一个滚动?
- mysql - 查询未显示预期输出
- c# - 如何在松鼠窗口中检索 FutureReleaseEntry 发行说明?
- ffmpeg - FFMPEG - x265 (libx265) 的一些推荐参数是什么?