我有以下
df
P M amount date
1 1 100 03/2012
1 1 200 04/2012
1 2 100 03/2012
1 2 200 04/2012
1 3 300 03/2012
1 4 400 03/2012
...
unique(df$P)
和unique(df$M)
返回[i] 1 2 3 4 5 6 7 8 9 10
我正在尝试绘制每对P和M的金额与日期的关系(假设日期以POXIct表示),因此我为此使用了一个嵌套的for循环。
for(i in unique(df$P)) {
for(j in unique(df$M)) {
plot(amount ~ date, subset(df, P == i & M == j),
type = "l", main = print(paste("P", i, "and M", j)))
}
}
但是后来我得到了这个错误:
Error in plot.window(...) : need finite 'xlim' values
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) : no non-missing arguments to max; returning -Inf
当我尝试做进一步的功能时,事实证明,对于P = 1:4,每个在M中出现10次,即每个P = 1时都有M = 1:10
但是当我们达到P = 5时,它只有一对,M = 2,因此for循环中断了。
如何修改我的for循环以说明每一对?
答案 0 :(得分:0)
2次编辑:(1)在第二个for
循环中,使唯一M成为当前P的子集;以及(2)仅在有足够数据的情况下进行绘制;我选择了“足以成为“> 2个”数据点,但使用任何可行的方法。
for(i in unique(df$P)) {
for(j in unique(df[df$P==i, "M")) {
if(sum(df$P==i & df$M==j)>2) {
plot(amount ~ date, subset(df, P == i & M == j),
type = "l", main = print(paste("P", i, "and M", j)))
}
}
}