我有一个很大的数据集(14295,58)。每列是元素周期表中不同的元素(例如,Fe,Ca,Zr),并且行根据深度(以毫米为单位)排列;最后一列是深度值。我正在尝试编写一个可以在给定的深度间隔内针对给定的元素组进行自定义的代码,但是我不想每次查看不同的子集时都要经历并更改一堆代码。到目前为止,我已经创建了一个名为Section的数据框:
Section <- df[50:100,]
和一个称为Elements的向量:
Elements <- c("Fe", "Ca", "Zr")
我可以通过以下方式对Section数据帧进行二次采样:
Section %>%
select(., Elements, depth)
但是现在我想用ggplot进行绘制,但我不知道如何将Elements矢量调用到x变量。我尝试过:
Section %>%
select(., Elements, depth) %>%
ggplot() +
geom_path (aes(Elements, depth))
,但参数长度不同。如何绘制从Elements向量中选择的元素?
答案 0 :(得分:3)
我认为您的问题实际上是您的数据没有以最有用的方式进行格式化(宽还是长),因此您实际上并没有给ggplot
您所想的。如果您给它一个向量作为美感(此处为Elements
),它将尽力绘制它。在这种情况下,如果长度相匹配,则只需将depth
中的值与Elements
中的值相匹配即可。如此有效:
# Toy Data
df <- data.frame(O = 1:3,
Fe = 2:4,
Ca = 3:5,
Zr = 4:6,
depth = 5:7)
Elements <- c('Fe', 'Ca', 'Zr')
ggplot(df) +
geom_point(aes(x=Elements, y=depth))
但是它只匹配第一个depth
和'Fe'
,第二个depth
和'Ca'
,依此类推。我不认为这就是您希望发生的事情。
长数据与宽数据
所有这些元素都有单独的列,但是它们实际上表示不同的东西吗?您最好重新格式化数据,以便使用tidyr将所有这些“元素”列折叠为键值对:
# Wide:
df
O Fe Ca Zr depth
1 1 2 3 4 5
2 2 3 4 5 6
3 3 4 5 6 7
# Long
library(tidyr)
longDf <- tidyr::gather(df, element, amount, -depth)
longDf
depth element amount
1 5 O 1
2 6 O 2
3 7 O 3
4 5 Fe 2
5 6 Fe 3
6 7 Fe 4
7 5 Ca 3
8 6 Ca 4
9 7 Ca 5
10 5 Zr 4
11 6 Zr 5
12 7 Zr 6
现在,您可以使用dplyr
的{{1}}(想要用filter
进行子集设置来获得所需的元素),并使用新的depth
列作为绘制的x坐标:
element
我不确定您期望该图形的外观如何,但这应该可以帮助您入门。