我正在尝试使用函数绘制共享列名模式的多个数据表。以下是两个示例表:
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
我在绘图,第一个解决方案似乎是递归的。在这种情况下,“代码”匹配变量,但如果没有,我还想模式匹配?
由于
答案 0 :(得分:1)
plt <- function(dt,code) {
plot(dt$date, dt[[grep("min",names(dt))]])
}
plt(dt1,ppp)
plt(dt2,qqq)
答案 1 :(得分:0)
使用数据表%like%
功能可以获得您想要的功能而无需创建功能。根据您所寻找的内容,有以下几种选择:
plot(dt1[,.SD, .SDcols=names(dt1) %like% "date|_min$"])
dt1[,lapply(.SD, plot, date), .SDcols=names(dt1) %like% "_min$"]
code <- c("ppp", "qqq")
plot(dt1[,.SD, .SDcols=names(dt1) %like% sprintf("date|(%s)_min$", paste(code, collapse="|"))])