我可以为要选择的列拼凑名称吗?

时间:2018-07-25 20:18:40

标签: r ggplot2

我有一组数据(称为currentdata),其格式如下:

station   depth     As
   1       -1       0.5
   1        1       0.6
   1        3       0.7
   2       -1       0.1
   2        1       0.4
   2        3       0.2
   3       -1       0.6
   3        1       0.4
   3        3       0.7

我正在使用以下代码进行绘制:

#pick column names from currentdata to extract the metal name
column_names <- colnames(currentdata)
plotting_metal <- column_names[3]

#plot the data
plot <- ggplot(currentdata, aes(x=depth, y=currentdata[[3]])) +
  geom_bar(stat = "identity") +
  scale_x_reverse() +
  coord_flip()  +
  labs(title = paste(plotting_metal, "standardised sediment concentrations"), x = "depth (cm)",
       y = paste(plotting_metal, "concentration (ug/g)")) +
  facet_wrap(~station)
plot

现在,我想在这些图中添加一些线,以告诉我这些金属的正常背景浓度和潜在的毒性浓度值。为此,我制作了另一个表,称为boundary_values,其结构如下:

   level      As    Cd    Cr
base_level   0.2   0.4   0.7
high_level   0.6   0.7   1.4

现在,我希望此代码能够正常工作,这样我就不必在每次选择要绘制的新金属时都从boundary_values中手动输入所需金属的名称。相反,我希望它使用currentdata的第三列中的名称,并使用它来告诉它从boundary_values中选择哪一列。

到目前为止,这就是我所拥有的:

#pick column names from currentdata to extract the metal name
column_names <- colnames(currentdata)
plotting_metal <- column_names[3]

#get the correct boundary values
metal_values <- boundary_values$parse(text=plotting_metal)

base_value <- 
high_value <- 

#plot the data
plot <- ggplot(currentdata, aes(x=depth, y=currentdata[[3]])) +
  geom_bar(stat = "identity") +
  geom_hline(aes(yintercept=base_value, linetype = "background concentration"), colour="green") +
  geom_hline(aes(yintercept=high_value, linetype = "possibly harmful past this"), colour="red") +
  scale_x_reverse() +
  coord_flip()  +
  labs(title = paste(plotting_metal, "standardised sediment concentrations"), x = "depth (cm)",
       y = paste(plotting_metal, "concentration (ug/g)")) +
  facet_wrap(~station)
plot

您可以大致了解我要做什么,但是在尝试创建变量metal_values的过程中,它有点落伍。我的问题是,我尝试执行的操作是否甚至可以在R中完成?如果可以,应该尝试哪种方法?谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

我会进行匹配-尝试使用向量%in%的值吗?例如

vector[which(vector %in% c(value)]

将返回展示位置。 对于数据帧。如果执行df [row,name],它将返回您的绑定。