加入具有不同行数和列名的数据 table
Join data table with different number of rows and column names
我有两个表,我想用不同的行数和不同的列名 (FzR/FzL) 连接:
a <- data.frame(FzR = c(130.8616, 130.9943, 131.1719, 131.3771, 131.6092, 131.8660, 132.1437, 132.4384, 132.7980, 133.2867), limb = c("L","L","L","L","L","L","L","L","L","L"), time = c(1.724178, 1.725178, 1.726178, 1.727178, 1.728178, 1.729178, 1.730178, 1.731178, 1.732179, 1.733179))
b <- data.frame(FzL = c(134.8616, 130.9943, 134.1719, 135.3771, 135.6092, 135.8660, 135.1437, 135.4384), limb = c("R","R","R","R","R","R","R","R"), time = c(2.724178, 2.725178, 2.726178, 2.727178, 2.728178, 2.729178, 2.730178, 2.731178))
我想加入这两个表,如下所示:
Fz limb time
130.8616 L 0
130.9943 L 0.01
131.1719 L 0.02
131.3771 L 0.03
131.6092 L 0.04
131.8660 L 0.05
132.1437 L 0.06
132.4384 L 0.07
132.7980 L 0.08
133.2867 L 0.09
134.8616 R 0.10
130.9943 R 0.11
134.1719 R 0.12
135.3771 R 0.13
135.6092 R NA
135.8660 R NA
135.1437 R NA
135.4384 R NA
我的 objective 是将 FzR、FzL 和肢体列叠加在一起,从 a 和 b 数据帧中删除“时间”列,并在新数据帧中创建一个新的时间向量,以便根据肢体绘制 Fz 与时间的关系图。
我试过的代码:
rename_1 <- names(a)[names(a) == 'FzR'] <- 'Fz'
rename_2 <- names(b)[names(b) == 'FzL'] <- 'Fz'
rbind(rename_1,rename_2)
我的想法是将 FzR 和 FzL 列名称重命名为通用名称 Fz 以执行 rbind,但这并没有给我正确的输出。任何帮助将不胜感激,谢谢。
你的错误在于双重赋值,因为这样做你只保存了列的名称而你“丢失”了数据:
rename_1 <- names(a)[names(a) == 'FzR'] <- 'Fz'
> rename_1
[1] "Fz"
您只需重命名 a 和 b 的第一列并绑定它们即可:
names(a)[1] = "Fz"
names(b)[1] = "Fz"
res = rbind(a,b)
时间顺序稍后可以更改为:
res$time = seq(from=0.01,by=0.01,length.out = nrow(res))
最终结果:
Fz limb time
1 130.8616 L 0.01
2 130.9943 L 0.02
3 131.1719 L 0.03
4 131.3771 L 0.04
5 131.6092 L 0.05
6 131.8660 L 0.06
7 132.1437 L 0.07
8 132.4384 L 0.08
9 132.7980 L 0.09
10 133.2867 L 0.10
11 134.8616 R 0.11
12 130.9943 R 0.12
13 134.1719 R 0.13
14 135.3771 R 0.14
15 135.6092 R 0.15
16 135.8660 R 0.16
17 135.1437 R 0.17
18 135.4384 R 0.18
(在评论中讨论后编辑)
A dplyr
类似于
library(dplyr)
bind_rows(a, b) %>%
mutate(Fz = coalesce(FzR, FzL)) %>%
select(Fz, limb, time) %>%
group_by(limb) %>%
mutate(time = (seq_along(Fz)-1)*0.001)
这样,新创建的变量time
将是从0
到每个limb
的行数的一系列值,乘以一个因子[=16] =](因此它们将是毫秒)。对于 L 和 R 两个肢体,time
将从 0 开始。
输出
# A tibble: 18 x 3
# Groups: limb [2]
Fz limb time
<dbl> <chr> <dbl>
1 131. L 0
2 131. L 0.001
3 131. L 0.002
4 131. L 0.003
5 132. L 0.004
6 132. L 0.005
7 132. L 0.006
8 132. L 0.007
9 133. L 0.008
10 133. L 0.009
11 135. R 0
12 131. R 0.001
13 134. R 0.002
14 135. R 0.003
15 136. R 0.004
16 136. R 0.005
17 135. R 0.006
18 135. R 0.007
我有两个表,我想用不同的行数和不同的列名 (FzR/FzL) 连接:
a <- data.frame(FzR = c(130.8616, 130.9943, 131.1719, 131.3771, 131.6092, 131.8660, 132.1437, 132.4384, 132.7980, 133.2867), limb = c("L","L","L","L","L","L","L","L","L","L"), time = c(1.724178, 1.725178, 1.726178, 1.727178, 1.728178, 1.729178, 1.730178, 1.731178, 1.732179, 1.733179))
b <- data.frame(FzL = c(134.8616, 130.9943, 134.1719, 135.3771, 135.6092, 135.8660, 135.1437, 135.4384), limb = c("R","R","R","R","R","R","R","R"), time = c(2.724178, 2.725178, 2.726178, 2.727178, 2.728178, 2.729178, 2.730178, 2.731178))
我想加入这两个表,如下所示:
Fz limb time
130.8616 L 0
130.9943 L 0.01
131.1719 L 0.02
131.3771 L 0.03
131.6092 L 0.04
131.8660 L 0.05
132.1437 L 0.06
132.4384 L 0.07
132.7980 L 0.08
133.2867 L 0.09
134.8616 R 0.10
130.9943 R 0.11
134.1719 R 0.12
135.3771 R 0.13
135.6092 R NA
135.8660 R NA
135.1437 R NA
135.4384 R NA
我的 objective 是将 FzR、FzL 和肢体列叠加在一起,从 a 和 b 数据帧中删除“时间”列,并在新数据帧中创建一个新的时间向量,以便根据肢体绘制 Fz 与时间的关系图。
我试过的代码:
rename_1 <- names(a)[names(a) == 'FzR'] <- 'Fz'
rename_2 <- names(b)[names(b) == 'FzL'] <- 'Fz'
rbind(rename_1,rename_2)
我的想法是将 FzR 和 FzL 列名称重命名为通用名称 Fz 以执行 rbind,但这并没有给我正确的输出。任何帮助将不胜感激,谢谢。
你的错误在于双重赋值,因为这样做你只保存了列的名称而你“丢失”了数据:
rename_1 <- names(a)[names(a) == 'FzR'] <- 'Fz'
> rename_1
[1] "Fz"
您只需重命名 a 和 b 的第一列并绑定它们即可:
names(a)[1] = "Fz"
names(b)[1] = "Fz"
res = rbind(a,b)
时间顺序稍后可以更改为:
res$time = seq(from=0.01,by=0.01,length.out = nrow(res))
最终结果:
Fz limb time
1 130.8616 L 0.01
2 130.9943 L 0.02
3 131.1719 L 0.03
4 131.3771 L 0.04
5 131.6092 L 0.05
6 131.8660 L 0.06
7 132.1437 L 0.07
8 132.4384 L 0.08
9 132.7980 L 0.09
10 133.2867 L 0.10
11 134.8616 R 0.11
12 130.9943 R 0.12
13 134.1719 R 0.13
14 135.3771 R 0.14
15 135.6092 R 0.15
16 135.8660 R 0.16
17 135.1437 R 0.17
18 135.4384 R 0.18
(在评论中讨论后编辑)
A dplyr
类似于
library(dplyr)
bind_rows(a, b) %>%
mutate(Fz = coalesce(FzR, FzL)) %>%
select(Fz, limb, time) %>%
group_by(limb) %>%
mutate(time = (seq_along(Fz)-1)*0.001)
这样,新创建的变量time
将是从0
到每个limb
的行数的一系列值,乘以一个因子[=16] =](因此它们将是毫秒)。对于 L 和 R 两个肢体,time
将从 0 开始。
输出
# A tibble: 18 x 3
# Groups: limb [2]
Fz limb time
<dbl> <chr> <dbl>
1 131. L 0
2 131. L 0.001
3 131. L 0.002
4 131. L 0.003
5 132. L 0.004
6 132. L 0.005
7 132. L 0.006
8 132. L 0.007
9 133. L 0.008
10 133. L 0.009
11 135. R 0
12 131. R 0.001
13 134. R 0.002
14 135. R 0.003
15 136. R 0.004
16 136. R 0.005
17 135. R 0.006
18 135. R 0.007