如何在data.frame中引用data.frame的列?
我有一个名为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中引用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]](因此它只是一
[.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 ...