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

如何在data.frame中引用data.frame的列?,r,dataframe,R,Dataframe,我有一个名为series_to_plot.df的data.frame,它是我通过将许多其他data.frames组合在一起创建的(如下所示)。现在我只想从每一个中拉出.mm列,这样我就可以绘制它们了。因此,我想拉出每个data.frame的第3列(例如p3c3.mm、p3c4.mm等),但我看不出如何在不循环名称的情况下对对象中的所有data.frames执行此操作。这可能吗 我只能拿出一组:例如,系列图到绘图.df[[3]]和另一组 series_to_plot.df[[10]](因此它只是一

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

我只能拿出一组:例如,系列图到绘图.df[[3]]和另一组 series_to_plot.df[[10]](因此它只是一个向量列表…),我可以直接引用series_to_plot.df$p3c3.mm,但是否有命令从每个data.frame获取包含所有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

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

names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE)
series_to_plot.df[, names_with_mm]
然后,
mm
值在一列中,更容易绘制。

有一些关于索引的好信息(第3.4.1节),这非常有用

然后,您可以使用grep()命令提取与序列匹配的名称。然后将其串在一起,如下所示:

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

dataWithMM要添加到其他答案中,我认为用变量名编码有用的信息不是一个好主意。最好重新排列数据,使所有有用的信息都在某个变量的值中。我对您的数据集了解不够,无法建议正确的格式,但可能是这样的

p c         rd day date mm sd ...
3 3 2010-10-04 ...
完成此操作后,问题的答案将变成简单的
df$mm


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

Marek的答案的正则表达式比我的好。“[mm]”将匹配其中任何带有“mm”的列。“mm$”将仅匹配以“mm”结尾的列哪一个可能更合适。你确定series\u to\u plot.df是一个数据帧吗?当我阅读你的评论并查看输出时,我想知道它是一个包含多个数据帧的列表还是向量。我不确定为什么你的输出每隔3行显示列标题,并且行号重新开始。要测试结构,请运行str(series\u to\u plot.df)谢谢,是的,它是一个data.frame,它是另一个data.frame中的一组data.frames。但是你是对的,这不是最好的数据结构,我在这里找到了一些关于最佳结构的提示:我在我的回答中也尝试过建议它,但我假设
pxcy
是部分data.frame(rbind/cbind)的名称.但你的提示是将部分名称作为新列包含在内,这非常好。谢谢,我将尝试熔化并重塑…(另请参见)
 namesThatMatch <- grep("[mm]", names(series_to_plot.df)
  dataWithMM <- series_to_plot.df[, namesThatMatch ]
p c         rd day date mm sd ...
3 3 2010-10-04 ...