【问题标题】:Plot certain columns based on their name根据名称绘制某些列
【发布时间】:2021-02-08 20:04:16
【问题描述】:

我有一个包含多个列的数据框,如下所示。

date               A       B        C        D         E
1996-01-02  1.000000 1.00000  1.00000  1.00000   1.00000
1996-01-03  0.000950 0.00020  0.99975  1.00000   1.00007
1996-01-04 -0.005826 0.00020  1.00006  1.00046   1.00068
1996-01-05 -0.001587 0.00019  0.99962  0.99917   0.99853
1996-01-08  0.002821 0.00020  0.99878  0.99695   0.99493
1996-01-09 -0.014568 0.00020  0.99935  0.99801   0.99649

我只想绘制某些列,其中列名与另一个 df 的前 x 行名匹配,如下所示:

Row Name     Value
B        0.2455867
C        0.2117051
Z        0.2043087
M        0.1997719
A        0.1706845

例如,我可以选择只绘制前两个,这会在组合图中给我列 B 和 C,因为第二个 df 中的前两个行名称是 B 和 C。

【问题讨论】:

  • 根据描述不清楚。是否要从第一个数据中提取值
  • 是的,并按列绘制它们。甚至可能在一个图表中,并且日期列位于 y 轴上。

标签: r


【解决方案1】:

我们可以根据前两个 row.names 对数据集进行子集化

matplot(as.matrix(`row.names<-`(df1[intersect(names(df1), 
     row.names(df2))], df1$date)), type = 'l', xaxt = 'n', ylab = 'value')
axis(side = 1, at = seq_len(nrow(df1)), labels = df1$date)

或将绘图转换为xts 对象

library(xts)
library(xtsExtra)
plot(xts(df1[intersect(names(df1), 
       row.names(df2))], order.by = as.Date(df1$date)), 
    main = 'plot', auto.legend = TRUE)

-输出

数据

df1 <- structure(list(date = c("1996-01-02", "1996-01-03", "1996-01-04", 
"1996-01-05", "1996-01-08", "1996-01-09"), A = c(1, 0.00095, 
-0.005826, -0.001587, 0.002821, -0.014568), B = c(1, 2e-04, 2e-04, 
0.00019, 2e-04, 2e-04), C = c(1, 0.99975, 1.00006, 0.99962, 0.99878, 
0.99935), D = c(1, 1, 1.00046, 0.99917, 0.99695, 0.99801), E = c(1, 
1.00007, 1.00068, 0.99853, 0.99493, 0.99649)),
class = "data.frame", row.names = c(NA, 
-6L))

df2 <- structure(list(Value = c(0.24, 0.21, 0.2, 0.19, 0.17)), class = "data.frame",
row.names = c("B", 
"C", "Z", "M", "A"))

【讨论】:

  • 谢谢。是否也可以将其放在一个图表中并将其绘制为日期的线?
  • @ITsMe 您的意思是与第二个数据的 row.names 匹配的所有列?
猜你喜欢
  • 2021-05-07
  • 1970-01-01
  • 2017-08-23
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多