R:根据一列中的数据绘制矩阵中的数据
R: Plot data in matrix against data from one column
我有一个包含 >200 个数据点的矩阵。这是我的对象 x。
在第二个对象(元数据)中,我有一个包含 20 个数据点的列 (y)。
我想根据对象元数据
中的 20 个数据点 (y) 绘制矩阵(对象 x)
plot(x, metadata$y)
不起作用,因为 x 和 y 长度不同。有可能绘制这个吗?
矩阵 x:
X1 X4 X7 X9
X4 0.7
X7 0.8 0.5
X9 0.6 0.6 0.7
元数据
X1 65.4
X4 9.7
X7 47.4
X9 14.5
元数据$y:65.4 9.7 47.4 14.5
这是一个 tidyverse
解决方案:好的,使用这些数据框(post 底部的结构):
> df
X1 X4 X7 X9
X4 0.7 NA NA NA
X7 0.8 0.5 NA NA
X9 0.6 0.6 0.7 NA
> metadata
y
X1 65.4
X4 9.7
X7 47.4
X9 14.5
首先,为简单起见,从 metadata
中提取 rownames()
:
metadata$x <- rownames(metadata)
> metadata
y x
X1 65.4 X1
X4 9.7 X4
X7 47.4 X7
X9 14.5 X9
现在使用 gather
将 x 矩阵转换为长格式数据帧,使用 'x' 作为键,就像上面的 rownames
步骤一样。接下来,使用 left_join
将元数据连接到长数据帧,使用两个数据帧中的 x
作为公共列。
long <- gather(df, key = "x") %>%
left_join(metadata, by = "x")
> long
x value y
1 X1 0.7 65.4
2 X1 0.8 65.4
3 X1 0.6 65.4
4 X4 NA 9.7
5 X4 0.5 9.7
6 X4 0.6 9.7
7 X7 NA 47.4
8 X7 NA 47.4
9 X7 0.7 47.4
10 X9 NA 14.5
11 X9 NA 14.5
12 X9 NA 14.5
剧情:
plot(value ~ y, data = long, pch = 19)
数据:
df <-
structure(
list(
X1 = c(0.7, 0.8, 0.6),
X4 = c(NA, 0.5, 0.6),
X7 = c(NA,
NA, 0.7),
X9 = c(NA, NA, NA)
),
.Names = c("X1", "X4", "X7", "X9"),
row.names = c("X4", "X7", "X9"),
class = "data.frame"
)
metadata <-
structure(
list(y = c(65.4, 9.7, 47.4, 14.5)),
.Names = "y",
row.names = c("X1",
"X4", "X7", "X9"),
class = "data.frame"
)
看起来很像你的x
不是一个完整的矩阵,而是对称相异矩阵的下三角部分。 class(x)
是说 "dist"
吗?如果是这样,您可以将差异更改为具有 as.matrix(x)
的对称矩阵,然后它匹配 y
(metadata).
的长度
这与另一个答案中提出的技巧相同,不同之处在于它为您提供了一个对称矩阵,而不是在上对角线上具有 NA
。你应该知道哪个是正确的决定。
我有一个包含 >200 个数据点的矩阵。这是我的对象 x。 在第二个对象(元数据)中,我有一个包含 20 个数据点的列 (y)。 我想根据对象元数据
中的 20 个数据点 (y) 绘制矩阵(对象 x)plot(x, metadata$y)
不起作用,因为 x 和 y 长度不同。有可能绘制这个吗?
矩阵 x:
X1 X4 X7 X9
X4 0.7
X7 0.8 0.5
X9 0.6 0.6 0.7
元数据
X1 65.4
X4 9.7
X7 47.4
X9 14.5
元数据$y:65.4 9.7 47.4 14.5
这是一个 tidyverse
解决方案:好的,使用这些数据框(post 底部的结构):
> df
X1 X4 X7 X9
X4 0.7 NA NA NA
X7 0.8 0.5 NA NA
X9 0.6 0.6 0.7 NA
> metadata
y
X1 65.4
X4 9.7
X7 47.4
X9 14.5
首先,为简单起见,从 metadata
中提取 rownames()
:
metadata$x <- rownames(metadata)
> metadata
y x
X1 65.4 X1
X4 9.7 X4
X7 47.4 X7
X9 14.5 X9
现在使用 gather
将 x 矩阵转换为长格式数据帧,使用 'x' 作为键,就像上面的 rownames
步骤一样。接下来,使用 left_join
将元数据连接到长数据帧,使用两个数据帧中的 x
作为公共列。
long <- gather(df, key = "x") %>%
left_join(metadata, by = "x")
> long
x value y
1 X1 0.7 65.4
2 X1 0.8 65.4
3 X1 0.6 65.4
4 X4 NA 9.7
5 X4 0.5 9.7
6 X4 0.6 9.7
7 X7 NA 47.4
8 X7 NA 47.4
9 X7 0.7 47.4
10 X9 NA 14.5
11 X9 NA 14.5
12 X9 NA 14.5
剧情:
plot(value ~ y, data = long, pch = 19)
数据:
df <-
structure(
list(
X1 = c(0.7, 0.8, 0.6),
X4 = c(NA, 0.5, 0.6),
X7 = c(NA,
NA, 0.7),
X9 = c(NA, NA, NA)
),
.Names = c("X1", "X4", "X7", "X9"),
row.names = c("X4", "X7", "X9"),
class = "data.frame"
)
metadata <-
structure(
list(y = c(65.4, 9.7, 47.4, 14.5)),
.Names = "y",
row.names = c("X1",
"X4", "X7", "X9"),
class = "data.frame"
)
看起来很像你的x
不是一个完整的矩阵,而是对称相异矩阵的下三角部分。 class(x)
是说 "dist"
吗?如果是这样,您可以将差异更改为具有 as.matrix(x)
的对称矩阵,然后它匹配 y
(metadata).
这与另一个答案中提出的技巧相同,不同之处在于它为您提供了一个对称矩阵,而不是在上对角线上具有 NA
。你应该知道哪个是正确的决定。