我有一个像这样的数据框df
:
x series no
1 24 u 3
2 12 u 2
3 23 v 1
4 17 u 3
5 5 v 2
6 45 v 1
7 18 u 3
8 32 v 2
9 34 u 1
10 37 v 3
...
此处,x
是衡量的值,series
是测量所属的系列,no
是该系列中的数字。
我想了解x
中series
的价值分布如何在u
之间变化。
我可以简单地过滤掉每个系列/否,并将它们绘制成不同的线条。结果如下:
现在你可以看到在v
系列中,变化在某些地方更多而在其他地方更少。系列ggplot
也是如此。我想以置信区间显示这个,并得到这样的结果:
这里棕色线是线u1,u2和u3的平均值,粉色区域是置信区间。同样适用于浅蓝色,深蓝色和v1,v2,v3。
当然,置信区间看起来会略有不同,因为我在不计算实际CI的情况下不经意地手绘,但希望我的意图很明确。
如何在R中完成此操作?我可以使用 public double[] fourierLowPassFilter(double[] data, double lowPass, double frequency){
//data: input data, must be spaced equally in time.
//lowPass: The cutoff frequency at which
//frequency: The frequency of the input data.
//The apache Fft (Fast Fourier Transform) accepts arrays that are powers of 2.
int minPowerOf2 = 1;
while(minPowerOf2 < data.length)
minPowerOf2 = 2 * minPowerOf2;
//pad with zeros
double[] padded = new double[minPowerOf2];
for(int i = 0; i < data.length; i++)
padded[i] = data[i];
FastFourierTransformer transformer = new FastFourierTransformer(DftNormalization.STANDARD);
Complex[] fourierTransform = transformer.transform(padded, TransformType.FORWARD);
//build the frequency domain array
double[] frequencyDomain = new double[fourierTransform.length];
for(int i = 0; i < frequencyDomain.length; i++)
frequencyDomain[i] = frequency * i / (double)fourierTransform.length;
//build the classifier array, 2s are kept and 0s do not pass the filter
double[] keepPoints = new double[frequencyDomain.length];
keepPoints[0] = 1;
for(int i = 1; i < frequencyDomain.length; i++){
if(frequencyDomain[i] < lowPass)
keepPoints[i] = 2;
else
keepPoints[i] = 0;
}
//filter the fft
for(int i = 0; i < fourierTransform.length; i++)
fourierTransform[i] = fourierTransform[i].multiply((double)keepPoints[i]);
//invert back to time domain
Complex[] reverseFourier = transformer.transform(fourierTransform, TransformType.INVERSE);
//get the real part of the reverse
double[] result = new double[data.length];
for(int i = 0; i< result.length; i++){
result[i] = reverseFourier[i].getReal();
}
return result;
}
吗?
答案 0 :(得分:0)
第一张图涉及按两个因素分组,可以使用ggplot2
绘制。以下是使用R中的mpg
数据集的示例。cty
是一个数值变量,drv
和fl
是两个分类变量。
首先必须合并两个因素。
library(dplyr)
copy_mpg <- mpg
copy_mpg <- select(mpg, cty, drv, fl)
copy_mpg$df <- with(copy_mpg, interaction(drv, fl))
简介:
ggplot(copy_mpg, aes(hwy, col=df)) + geom_density() + theme_bw()
快捷方式:ggplot(copy_mpg, aes(hwy, col=interaction(drv, fl))) + geom_density() + theme_bw()