如何在data.frame中引用data.frame的列?

时间:2010-02-24 19:58:12

标签: r dataframe

我有一个名为series_to_plot.df的data.frame,我是通过将许多其他data.frames组合在一起创建的(如下所示)。我现在想从每个中拉出.mm列,所以我可以绘制它们。所以我想拉出每个data.frame的第3列(例如p3c3.mm,p3c4.mm等...),但我看不到如何对对象中的所有data.frames执行此操作而不进行循环名字。这可能吗?

我只能拔出一套:例如series_to_plot.df [[3]]和另一个 series_to_plot.df [[10]](所以它只是一个向量列表..),我可以直接用series_to_plot.df $ p3c3.mm引用,但是有一个命令可以从每个数据中获取包含所有mm的向量。帧?我期待像这样的索引:series_to_plot.df [,3 [3]]但它在[.data.frame中返回错误(series_to_plot.df,3 [3]):选择了未定义的列

series_to_plot.df
          p3c3.rd         p3c3.day    p3c3.mm      p3c3.sd                 p3c3.n p3c3.noo p3c3.no_NAs
    1     2010-01-04             0    0.1702531    0.04003364              7                1           0
    2     2010-01-06             2    0.1790594    0.04696674              7                1           0
    3     2010-01-09             5    0.1720404    0.03801756              8                0           0

          p3c4.rd         p3c4.day    p3c4.mm      p3c4.sd                 p3c4.n p3c4.noo p3c4.no_NAs
    1     2010-01-04             0    0.1076581   0.006542157              6                2           0
    2     2010-01-06             2    0.1393447   0.066758781              7                1           0
    3     2010-01-09             5    0.2056846   0.047722862              7                1           0

          p3c5.rd         p3c5.day    p3c5.mm      p3c5.sd                 p3c5.n p3c5.noo p3c5.no_NAs
    1     2010-01-04             0   0.07987147   0.006508766              7                1           0
    2     2010-01-06             2   0.11496167   0.046478767              8                0           0
    3     2010-01-09             5   0.40326471   0.210217097              7                1           0

3 个答案:

答案 0 :(得分:4)

要获取具有指定名称的所有列,您可以执行以下操作:

names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE)
series_to_plot.df[, names_with_mm]

但如果你的基础data.frame都具有相同的结构,那么你可以rbind,例如:

series_to_plot.df <- rbind(
  cbind(name="p3c3", p3c3),
  cbind(name="p3c4", p3c4),
  cbind(name="p3c5", p3c5)
)

然后mm值在一列中,并且更容易绘制。

答案 1 :(得分:2)

要添加其他答案,我认为以变量名称编码有用信息并不是一个好主意。更好地重新排列数据,以便所有有用的信息都在某个变量的值中。我不太了解您的数据集以建议正确的格式,但它可能类似于

p c         rd day date mm sd ...
3 3 2010-10-04 ...

完成此操作后,问题的答案就变得简单df$mm

如果您从外部源获取的数据不太有用,可以使用reshape函数或reshape中的函数,在R中以更有用的形式重新排列数据。封装

答案 2 :(得分:1)

R Language Definition有一些关于索引的好信息(第3.4.1节),这非常有帮助。

然后,您可以使用grep()命令提取与序列匹配的名称。然后将它们串起来像这样:

 dataWithMM <- series_to_plot.df[,grep("[P]", names(series_to_plot.df))]

稍微解构一下,这会得到与“mm”模式匹配的列数:

 namesThatMatch <- grep("[mm]", names(series_to_plot.df)

然后我们使用该列表来调用我们想要的列:

  dataWithMM <- series_to_plot.df[, namesThatMatch ]