0

这段代码在 RSTUDIO 中运行良好:

pos1<- min(which(is.na(extract[1,])==FALSE))
pos2<-(min(which(is.na(extract[1,])==FALSE & extract[1,]%in%hh[,1]==FALSE))-1)

set1<-extract[1, pos1:pos2]

repsc<-length(which(is.na(set1[1,])==TRUE))/length(which(is.na(set1[1,])==FALSE)) 

  set2<-set1[is.na(set1[1,])==FALSE,]
    set2[,is.na(set2[1,])==TRUE]<-NULL
      set2<-set2[-c(2,3),]

set1[1,]<-rep(set2,1,each=(repsc+1))  
    extract[1,pos1:pos2]<-set1  

这变成了这样:

           X8   X9  X10      X11  X12   X13    X14  X15  X16
5 HH Live <NA> <NA> HH Live+ <NA>  <NA> HH Com <NA> <NA>
6         <NA> <NA>    1 Day <NA> 2 Day     C3 <NA>   C7
7     Rtg   Sh   AA      Rtg   AA   Rtg    Rtg   AA  Rtg

对此:

       X8      X9     X10      X11      X12      X13    X14    X15    X16
5 HH Live HH Live HH Live HH Live+ HH Live+ HH Live+ HH Com HH Com HH Com
6            <NA>    <NA>    1 Day     <NA>    2 Day     C3   <NA>     C7
7     Rtg      Sh      AA      Rtg       AA      Rtg    Rtg     AA    Rtg

但是,在 Alteryx R 工具中会发生两件事:

1) set1 不会复制到提取中,这意味着它不会将 HH LIVE、HH LIVE+ 和 HH COM 复制到第 1 行。一行代码似乎把它搞砸了(适用于 RSTUDIO,而不是 R TOOL在 Alteryx 中:

extract[1,pos1:pos2]<-set1 

2)我在 Alteryx 中收到此警告消息:

R (2)   1: In `[<-.factor`(`*tmp*`, iseq, value = 89L) :
R (2)   invalid factor level, NA generated

我检查了我的数据类型——它们都是因素,两个对象都是类“data.frame”。

这里发生了什么?

4

1 回答 1

0

该错误消息来自尝试将新值放入关卡中已不存在的因素中。例如:

> x=factor(c("eggs","bacon","eggs","eggs"))
> x
[1] eggs  bacon eggs  eggs 
Levels: bacon eggs

现在我尝试使第一个项目不在levels()

> x[1]="cheese"
Warning message:
In `[<-.factor`(`*tmp*`, 1, value = "cheese") :
  invalid factor level, NA generated
> 

这就是你得到的错误。所以现在你需要调试它,也许打印出它当时试图做的事情,或者使用调试器或browser()函数来停止代码并检查它当时正在做什么。

没有您的所有数据,我们不希望为您提供更多帮助。

于 2017-05-01T07:36:01.547 回答