使用gather()创建单独的整齐列
我有姿势血压数据(3个时间点的脉搏、收缩和舒张),以及一些关键的其他变量,我想创建整洁的血压数据版本 我曾尝试对单个变量类型(例如,systolic)使用gather(),但在执行所有3个变量类型时(59个原始参与者,在将三个gather()函数连接在一起时变为1593个变量)都不起作用使用gather()创建单独的整齐列,r,tidyr,R,Tidyr,我有姿势血压数据(3个时间点的脉搏、收缩和舒张),以及一些关键的其他变量,我想创建整洁的血压数据版本 我曾尝试对单个变量类型(例如,systolic)使用gather(),但在执行所有3个变量类型时(59个原始参与者,在将三个gather()函数连接在一起时变为1593个变量)都不起作用 库(tidyverse) ID这可以用tidyverse来完成,但是用好的base::重塑要容易得多: v <- list(c("diastolic_lying", "diastolic_standing
库(tidyverse)
ID这可以用tidyverse
来完成,但是用好的base::重塑
要容易得多:
v <- list(c("diastolic_lying", "diastolic_standing_1", "diastolic_standing_3"),
c("pulse_lying", "pulse_lying_1", "pulse_lying_3"),
c("systolic_lying", "systolic_standing_1", "systolic_standing_3"))
reshape(as.data.frame(bp),
v,
direction = "long",
v.names = c("diastolic", "pulse", "systolic"),
times = c("lying", "standing_1", "standing_3"),
idvar = "ID",
timevar = "type") %>%
as_tibble()
# A tibble: 15 x 7
# ID group measure_1 type diastolic pulse systolic
# <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
# 1 1138 1 8 lying 80 58 169
# 2 430 1 14 lying 93 71 141
# 3 245 2 6 lying 80 58 144
# 4 1431 3 11 lying 71 63 120
# 5 1587 4 28 lying 66 98 88
# 6 1138 1 8 standing_1 87 62 163
# 7 430 1 14 standing_1 97 93 156
# 8 245 2 6 standing_1 79 61 129
# 9 1431 3 11 standing_1 77 70 127
# 10 1587 4 28 standing_1 75 73 102
# 11 1138 1 8 standing_3 92 67 179
# 12 430 1 14 standing_3 100 97 152
# 13 245 2 6 standing_3 83 63 146
# 14 1431 3 11 standing_3 79 71 127
# 15 1587 4 28 standing_3 77 76 106
v%
作为_tible()
#一个tibble:15x7
#ID组测量1型舒张压和收缩压
#
#1113818卧位8058169
#2430114卧位9371141
#3245 26卧位8058 144
#414313 11躺着7163 120
#51587428躺着669888
#6113818常设会议18762163
#743014常设会议19793156
#8245 2 6常设会议179 61 129
#914313 11常设会议177 70 127
#101587428常设法庭17573102
#11113818常设委员会39267179
#12 430 1 14常设单位3 100 97 152
#13 245 2 6常设单位3 83 63 146
#14 1431 3 11常设会议3 79 71 127
#15 1587 4 28常设论坛3 77 76 106
这可以用tidyverse
来完成,但使用好的旧基础::重塑
:
v <- list(c("diastolic_lying", "diastolic_standing_1", "diastolic_standing_3"),
c("pulse_lying", "pulse_lying_1", "pulse_lying_3"),
c("systolic_lying", "systolic_standing_1", "systolic_standing_3"))
reshape(as.data.frame(bp),
v,
direction = "long",
v.names = c("diastolic", "pulse", "systolic"),
times = c("lying", "standing_1", "standing_3"),
idvar = "ID",
timevar = "type") %>%
as_tibble()
# A tibble: 15 x 7
# ID group measure_1 type diastolic pulse systolic
# <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
# 1 1138 1 8 lying 80 58 169
# 2 430 1 14 lying 93 71 141
# 3 245 2 6 lying 80 58 144
# 4 1431 3 11 lying 71 63 120
# 5 1587 4 28 lying 66 98 88
# 6 1138 1 8 standing_1 87 62 163
# 7 430 1 14 standing_1 97 93 156
# 8 245 2 6 standing_1 79 61 129
# 9 1431 3 11 standing_1 77 70 127
# 10 1587 4 28 standing_1 75 73 102
# 11 1138 1 8 standing_3 92 67 179
# 12 430 1 14 standing_3 100 97 152
# 13 245 2 6 standing_3 83 63 146
# 14 1431 3 11 standing_3 79 71 127
# 15 1587 4 28 standing_3 77 76 106
v%
作为_tible()
#一个tibble:15x7
#ID组测量1型舒张压和收缩压
#
#1113818卧位8058169
#2430114卧位9371141
#3245 26卧位8058 144
#414313 11躺着7163 120
#51587428躺着669888
#6113818常设会议18762163
#743014常设会议19793156
#8245 2 6常设会议179 61 129
#914313 11常设会议177 70 127
#101587428常设法庭17573102
#11113818常设委员会39267179
#12 430 1 14常设单位3 100 97 152
#13 245 2 6常设单位3 83 63 146
#14 1431 3 11常设会议3 79 71 127
#15 1587 4 28常设论坛3 77 76 106
使用tidyverse
这并不难实现,而且不依赖于参数,因此当数据发生变化(额外测量)时,代码将继续工作
library(tidyverse)
ID <- c(1138, 430, 245, 1431, 1587)
group <- c(1, 1, 2, 3, 4)
measure_1 <- c(8, 14, 6, 11, 28)
systolic_lying <- c(169, 141, 144, 120, 88)
systolic_standing_1 <- c(163, 156, 129, 127, 102)
systolic_standing_3 <- c(179, 152, 146, 127, 106)
diastolic_lying <- c(80, 93, 80, 71, 66)
diastolic_standing_1 <-c(87, 97, 79, 77, 75)
diastolic_standing_3 <-c(92, 100, 83, 79, 77)
pulse_lying <-c(58, 71, 58, 63, 98)
pulse_standing_1 <- c(62, 93, 61, 70, 73)
pulse_standing_3 <- c(67, 97, 63, 71, 76)
bp <- tibble(ID, group, measure_1, systolic_lying, systolic_standing_1, systolic_standing_3,
diastolic_lying, diastolic_standing_1, diastolic_standing_3,
pulse_lying, pulse_standing_1, pulse_standing_3)
bp %>%
gather(key, value, -ID, -group,-measure_1) %>%
mutate(posture = str_extract(key,'(?<=[a-z]{1,20}_).+'),
measure = str_extract(key,'^[a-z]+(?=_)')) %>%
group_by(ID, group,measure_1,posture) %>%
select(-key) %>%
spread(measure, value) %>%
arrange(posture)
使用tidyverse
实现起来并不难,而且不依赖于参数,因此当数据发生变化(额外测量)时,代码将继续工作
library(tidyverse)
ID <- c(1138, 430, 245, 1431, 1587)
group <- c(1, 1, 2, 3, 4)
measure_1 <- c(8, 14, 6, 11, 28)
systolic_lying <- c(169, 141, 144, 120, 88)
systolic_standing_1 <- c(163, 156, 129, 127, 102)
systolic_standing_3 <- c(179, 152, 146, 127, 106)
diastolic_lying <- c(80, 93, 80, 71, 66)
diastolic_standing_1 <-c(87, 97, 79, 77, 75)
diastolic_standing_3 <-c(92, 100, 83, 79, 77)
pulse_lying <-c(58, 71, 58, 63, 98)
pulse_standing_1 <- c(62, 93, 61, 70, 73)
pulse_standing_3 <- c(67, 97, 63, 71, 76)
bp <- tibble(ID, group, measure_1, systolic_lying, systolic_standing_1, systolic_standing_3,
diastolic_lying, diastolic_standing_1, diastolic_standing_3,
pulse_lying, pulse_standing_1, pulse_standing_3)
bp %>%
gather(key, value, -ID, -group,-measure_1) %>%
mutate(posture = str_extract(key,'(?<=[a-z]{1,20}_).+'),
measure = str_extract(key,'^[a-z]+(?=_)')) %>%
group_by(ID, group,measure_1,posture) %>%
select(-key) %>%
spread(measure, value) %>%
arrange(posture)
编辑:我最初的解决方案使用左键连接,产生了不良影响,制作了许多数据副本。更正如下
我想这就是你要寻找的输出,在这里我们可以看到所有三种姿势以及每种姿势的配对值
在本例中,我使用bind\u cols
将三个键值对组合成您描述的格式
select(bp, ID:measure_1, systolic_lying:systolic_standing_3) %>%
gather("systolic_posture", "systolic", -c(ID:measure_1)) %>%
bind_cols(select(bp, ID:measure_1, diastolic_lying:diastolic_standing_3) %>%
gather("diastolic_posture", "diastolic", -c(ID:measure_1)) %>%
select(-c(ID:measure_1))) %>%
bind_cols(select(bp, ID:measure_1, pulse_lying:pulse_lying_3) %>%
gather("pulse_posture", "pulse", -c(ID:measure_1)) %>%
select(-c(ID:measure_1)))
# A tibble: 15 x 9
ID group measure_1 systolic_posture systolic diastolic_posture diastolic pulse_posture pulse
<dbl> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <chr> <dbl>
1 1138 1 8 systolic_lying 169 diastolic_lying 80 pulse_lying 58
2 430 1 14 systolic_lying 141 diastolic_lying 93 pulse_lying 71
3 245 2 6 systolic_lying 144 diastolic_lying 80 pulse_lying 58
4 1431 3 11 systolic_lying 120 diastolic_lying 71 pulse_lying 63
5 1587 4 28 systolic_lying 88 diastolic_lying 66 pulse_lying 98
6 1138 1 8 systolic_standing_1 163 diastolic_standing_1 87 pulse_lying_1 62
7 430 1 14 systolic_standing_1 156 diastolic_standing_1 97 pulse_lying_1 93
8 245 2 6 systolic_standing_1 129 diastolic_standing_1 79 pulse_lying_1 61
9 1431 3 11 systolic_standing_1 127 diastolic_standing_1 77 pulse_lying_1 70
10 1587 4 28 systolic_standing_1 102 diastolic_standing_1 75 pulse_lying_1 73
11 1138 1 8 systolic_standing_3 179 diastolic_standing_3 92 pulse_lying_3 67
12 430 1 14 systolic_standing_3 152 diastolic_standing_3 100 pulse_lying_3 97
13 245 2 6 systolic_standing_3 146 diastolic_standing_3 83 pulse_lying_3 63
14 1431 3 11 systolic_standing_3 127 diastolic_standing_3 79 pulse_lying_3 71
15 1587 4 28 systolic_standing_3 106 diastolic_standing_3 77 pulse_lying_3 76
select(血压,ID:measure1,收缩期卧位:收缩期卧位3)%>%
聚集(“收缩期_姿势”、“收缩期”、-c(ID:measure_1))%>%
绑定cols(选择(血压,ID:measure_1,舒张期:舒张期_3)%>%
聚集(“舒张期体位”、“舒张期”、-c(ID:measure_1))%>%
选择(-c(ID:measure_1)))%>%
绑定列(选择(bp,ID:测量列1,脉冲列:脉冲列3)%>%
聚集(“脉冲姿态”、“脉冲”、-c(ID:measure_1))%>%
选择(-c(ID:measure_1)))
#A tibble:15x9
ID组测量\u 1收缩\u体位收缩舒张\u体位舒张脉搏\u体位脉搏
1113818收缩压169舒张压80脉搏压58
243014收缩压141舒张压93脉搏压71
3245 2 6收缩压144舒张压80脉压58
4 1431 3 11收缩压压压120舒张压71脉搏压63
51587 4 28收缩压88舒张压66脉搏压98
611381 8收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
7430 114收缩压、舒张压、脉搏压
8245 2 6收缩压和舒张压和脉搏压
9 1431 3 11收缩压和舒张压和脉搏
101587 4 28收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
11 1138 1 8收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
12430 114收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
13 245 2 6收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
14 1431 3 11收缩压和舒张压和脉搏压
15 1587 4 28收缩压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压压
编辑:我最初的解决方案使用左键连接,产生了不良影响,制作了许多数据副本。更正如下
我想这是你的输出