我有一个我导入的csv,它有一个时间序列的多个数据字段.所以第一个字段是日期时间,其余字段是各种数据点.
如何绘制多个字段的逐点最大值,其中字段将在某种通配符上匹配?
例如:
time,foo1,foo2,foo3
1:00,1,2,3
2:00,3,1,1
3:00,2,5,3
Run Code Online (Sandbox Code Playgroud)
什么是绘制最简单的方法foo.*,使得我从每个字段最大:即从例子中得到的情节是:(1:00,3),(2:00,3),(3:00,5 )?
为了澄清这个例子,我的意思是最大点 **
time,foo1,foo2,foo3
1:00,1,2,*3*
2:00,*3*,1,1
3:00,2,*5*,3
Run Code Online (Sandbox Code Playgroud)
假设您的数据位于data.frame中x,您可以这样使用pmax:
cbind(x[,"time"], do.call(pmax, x[,grepl("^foo*",names(x))]))
Run Code Online (Sandbox Code Playgroud)
do.callpmax使用每列x作为...参数调用函数(第一列除外,通过负下标删除). cbind将第一列x与得到的矢量相结合do.call.
请注意,第二个参数do.call需要是列表,而data.frame是一个包含一些额外属性的列表.如果x不是data.frame,则需要将其强制转换为一个(或常规列表).