如何检测另一列中的数字并从R中的另一列写入数据?

时间:2017-09-25 10:07:51

标签: r sorting

我是R语言的新手。我尝试制作简单的代码,以不同的间隔查找一些数据,其中有关于间隔的起始端和表格的信息,现在有更大的间隔,我有几个代码可以解决,但没有一个能够工作。

主要思想是我有几个代表不同数组的变量(i,k,j)。在我看来,代码应该在另一个表中查找两个事物中的每个数组(如果它比第一列大,如果它小于第二列,如果两者都是真的 - 将所有这些都改为另一个表并转到其他区间)。 / p>

if(mydatatable[k,21]>=mydatatable[i,16]){
    if(mydatatable[k,21]<=mydatatable[j,18]) 
        shifr[n,1]<-n&shifr[n,2]<-mydata[k,21]&shifr[n,3]<-mydata[k,22]&i+1&j+1&k+1&n+1 
    else i+1&j+1&k+1
} 
else {
    if(mydatatable[i,16]==0) end 
    else i+1&j+1&k+1
    } 

这段代码有几处错误 if(mydatatable [k,21]&gt; = mydatatable [i,16]){的错误:   缺少需要TRUE / FALSE的值 另外:警告信息: 在Ops.factor(mydatatable [k,21],mydatatable [i,16])中:   '&gt; ='对因素没有意义 我想,为什么programm认为,mydatatable是因素?我想,为什么它应该是某种真值/假值,它已经在公式中建立了。 第二个代码几乎相同,甚至可能有效。 我预先建立了值i,k和j为1(i = 1,k = 1,j = 1) 但是出现了错误

> ifelse(mydatatable[k,21]>=mydatatable[i,16],
+        ifelse(mydatatable[k,21]<=mydatatable[j,18],
+               shifr[n,1]<-n&shifr[n,2]<-mydata[k,21]&shifr[n,3]<-mydata[k,22]&i+1&j+1&k+1&n+1,i+1&j+1&k+1),
+        ifelse(mydatatable[i,16]==0,
+               end),
+        i+1&j+1&k+1)
Error in ifelse(mydatatable[k, 21] >= mydatatable[i, 16], ifelse(mydatatable[k,  : 
  unused argument (i + 1 & j + 1 & k + 1)

我很困惑,为什么会这样。 请帮忙。

以下是数据示例。我想要得到的是https://1drv.ms/f/s!Aj4W4aYSeYkGiIFKHG0TV-TRQvWaIQ

这里我得到了几次使用data.table :: foverlaps(我修复了一些问题,但最初我得到了这个)

> data.table::foverlaps(int1,sh2,by.x=c("start","end"),by.y=c("start","end"))
Error in data.table::foverlaps(int1, sh2, by.x = c("start", "end"), by.y = c("start",  : 
  The first 2 columns of y's key is not identical to the columns specified in by.y.

我以前的代码也取得了一些进展。几个问题:首先,如何统一几个命令(我使用&amp; and;但它们都没有在shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1&j+中正常工作?) 第二,关于FUN中的错误(左,右)。

> ifelse(sh[k,1]>=int[i,1],
+        +        ifelse(sh[k,2]<=int[j,2],
+                        +               shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1;j+1;k+1;n+1,i+1;j+1;k+1),
Error: unexpected ';' in:
"       +        ifelse(sh[k,2]<=int[j,2],
                       +               shifr[n,1]<-n;"
>        +        i+1;j+1;k+1
[1] 16
[1] 16
[1] 65
> ifelse(sh[k,1]>=int[i,1],
+        +        ifelse(sh[k,2]<=int[j,2],
+                        +               shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1&j+1&k+1&n+1,i+1&j+1&k+1),
Error: unexpected ';' in:
"       +        ifelse(sh[k,2]<=int[j,2],
                       +               shifr[n,1]<-n;"
>        +        i+1&j+1&k+1
[1] TRUE
> ifelse(sh[k,1]>=int[i,1],
+        +        ifelse(sh[k,2]<=int[j,2],
+                        +               shifr[n,1]<-n&shifr[n,2]<-sh[k,1]&shifr[n,3]<-sh[k,1]&i+1&j+1&k+1&n+1,i+1&j+1&k+1),
+        +        i+1&j+1&k+1
+ )
Error in FUN(left, right) : 
  operations are possible only for numeric, logical or complex types

1 个答案:

答案 0 :(得分:0)

实际上,这段代码很糟糕。我最终做到了(在python中):

for i in interval:
...
     if float(i) < intervals[b][0]:
                    print("Interval are too high", intervals[b][1])
                    break
....    
                if float(i) >= intervals[b - 1][1]:
....