我有一个名为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
答案 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 ]