【发布时间】:2016-05-22 03:26:28
【问题描述】:
我正在尝试使用函数绘制多个共享列名模式的数据表。下面是两个示例表:
dt1 = data.table(date=seq(as.Date("2015/06/20"), as.Date("2015/06/29"), by= "day"),
ppp_min = rnorm(10), ppp_mean = rnorm(10), ppp_max = rnorm(10))
dt2 = data.table(date=seq(as.Date("2015/06/20"), as.Date("2015/06/29"), by= "day"),
qqq_min = rnorm(10), qqq_mean = rnorm(10), qqq_max = rnorm(10))
还有一个示例绘图功能:
plt <- function(dt,code) {
min <- paste(code, '_min',sep='')
plot(dt$date, dt[,get(min)])
}
plt(dt1,ppp)
plt(dt2,qqq)
该函数允许指定要绘制的数据表。函数中的“代码”用于应用相关标题和写入文件名,但恰好匹配列名中的变量。这是Get columns by string from data.table的应用程序
我的问题是:是否可以改为进行模式匹配?我尝试使用grep 并按照问题pass column name in data.table using variable in R 中的建议应用eval() 和quote() 来做到这一点
我尝试过做类似的事情:
plot(dt$date, dt[,grep("min",names(dt))])
我尝试模式匹配的原因是我有多个 colnames 我正在绘制并且第一个解决方案似乎是递归的。在这种情况下,“代码”与变量匹配,但如果它不匹配,我仍想进行模式匹配怎么办?
谢谢
【问题讨论】:
-
也许
plt <- function(dt, code) { plot(dt$date, unlist(dt[, paste0(code, '_min'), with = FALSE])) } ; plt(dt1, 'ppp') ; plt(dt2, 'qqq') -
我认为唯一的问题是缺少 with=FALSE (显示在 alistaire 的评论中)。或者,
[[喜欢plt = function(dt) plot(dt$date, dt[[grep("min",names(dt))]]) -
您知道您也可以在“data.table”中的
[中使用plot,对吧?喜欢dt1[, plot(.SD), .SDcols = c("date", grep("min", names(dt1), value = TRUE))]。 -
@Frank,您的建议似乎是解决方案。我曾尝试过这种变化,但不知何故错过了这个应用程序。它回答了这个问题谢谢!我会发布解决方案。
标签: regex r data.table