我有如下所示功能的一个for循环以产生具有值1的列:N由另一列匹配间隔
my_df=data.frame(x=runif(100, min = 0,max = 60),
y=runif(100, min = 0,max = 60)) #x and y in cm
有了这个,我需要从1值的新列的数据帧调节至36,匹配x
和y
每10厘米。例如,如果0<=x<=10 & 0<=y<=10
,放1,那么如果10<=x<=20 & 0<=y<=10
,把2等等放到6,然后0<=x<=10 & 10<=y<=20
开始7到12,等我试图做一个if
函数重复的x
6倍的时间间隔,并在每次迭代中增加y
的时间间隔。下面是函数
#my miscarried function 'zones'
>zones= function(x,y) {
i=vector(length = 6)
n=vector(length = 6)
z=vector(length = 36)
i[1]=0
z[1]=0
n[1]=1
for (t in 1:6) {
if (0<=x & x<10 & i[t]<=y & y<i[t]+10) { z[t] = n[t]} else
if (10<=x & x<20 & i[t]<=y & y<i[t]+10) {z[t]=n[t]+1} else
if (20<=x & x<30 & i[t]<=y & y<i[t]+10) {z[t]=n[t]+2} else
if (30<=x & x<40 & i[t]<=y & y<i[t]+10) {z[t]=n[t]+3} else
if (40<=x & x<50 & i[t]<=y & y<i[t]+10) {z[t]=n[t]+4}else
if (50<=x & x<=60 & i[t]<=y & y<i[t]+10) {z[t]=n[t]+5}
else {i[t+1]=i[t]+10
n[t+1]=n[t]+6}
}
return(z)
}
>xy$z=zones(x=xy$x,y=xy$y)
和我
There were 31 warnings (use warnings() to see them)
>xy$z
[1] 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
请帮助我之前,我孤独终老!
既然你不会独自死亡,你应该接受其中一个答案。 :) – Suren
@ Headpoint对不起!我正在一家酒吧里死去,但我看到了灯光。谢谢你,你提供的解决方案工作得很好。 – jealcalat