3

我有一个名为 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,但是是否有命令从每​​个 data.frame 中获取包含所有 mm 的向量?我期待这样的索引可以工作: series_to_plot.df[,3[3]] 但它返回错误[.data.frame(series_to_plot.df, , 3[3]) : undefined columns selected

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
4

3 回答 3

4

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

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

但是,如果您的 basedata.frame都具有相同的结构,那么您可以使用rbind它们,例如:

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

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

于 2010-02-24T20:22:33.777 回答
2

为了补充其他答案,我认为将有用的信息编码在变量名中并不是一个好主意。重新排列数据要好得多,这样所有有用的信息都在某个变量的值中。我对您的数据集知之甚少,无法建议正确的格式,但可能类似于

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

一旦你这样做了,你的问题的答案就变得简单了df$mm

如果您从外部来源以不太有用的形式获取数据,您可以使用包中的一个reshape或多个函数在 R 中以更有用的形式重新排列它reshape

于 2010-02-25T04:32:39.383 回答
1

R 语言定义有一些关于索引的好信息(第 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 ]
于 2010-02-24T20:35:10.970 回答