R:NA写入数据帧时出现,出现在if / else语句的第二个条件内

问题描述 投票:1回答:1

我正在尝试在R中运行一些代码,该代码根据一个数据在第一个“读取”数据帧中出现的条件,从一个数据帧读取数据并将其写入新数据帧。

由于某种原因,当我写入新的数据框时,我在最后一列中获得了字符的“ NA”值,但是只有当我尝试编写文本“ Byeeeeee”,“ HiThere”时,第二个if语句才会发生这种情况很好。

对为什么这对于第一个if语句有效,而对第二个if语句无效的任何见解?

输入文件是“ testWayang”,输出文件是“ outputWayang”

谢谢!

outputWayang<-data.frame(startId=numeric(), studId=numeric(), sessNum=numeric(), startTime=numeric(), problemId=numeric(), action=character())
for(i in 1:50){

    if(testWayang[i,4]=="beginProblem"){
        outputWayang = rbind(outputWayang, c(testWayang[i,1], testWayang[i,2], testWayang[i,3], testWayang[i,7], testWayang[i+1,9], as.character("HiThere")))       
    }

    else if(testWayang[i,4]=="studentFeedback"){
        outputWayang = rbind(outputWayang, c(testWayang[i,1], testWayang[i,2], testWayang[i,3], testWayang[i,7], testWayang[i,9], as.character("Byeeeeeee")))       
    }

    write.csv(outputWayang, file="place I write my file to on my computer", append=TRUE)
}
r conditional-statements na
1个回答
0
投票

您正在尝试使用具有数字和字符值的c函数创建矢量。那会让你失望的。同样,R新手经常无法识别与R默认创建因子变量有关的问题。您也许可以将列表绑定到现有数据框。让我们尝试一个简单的例子:

rbind( data.frame(a=1,b="y"), c(2,"n"))
  a    b
1 1    y
2 2 <NA>
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = "n") :
  invalid factor level, NA generated

这样可以复制您的失败;这也是您无意中将您期望成为数字类的第一个列强制转换为字符类的情况:

> str( rbind( data.frame(a=1,b="y"), c(2,"n")) )
'data.frame':   2 obs. of  2 variables:
 $ a: chr  "1" "2"
 $ b: Factor w/ 1 level "y": 1 NA

由于上述因素问题,仅使用列表也失败,但是如果使用具有所有可能水平的因素来创建数据框,那么您将获得成功:

rbind( data.frame(a=1,b=factor("y",levels=c("y","n"))), list(2,"n"))
  a b
1 1 y
2 2 n

我不确定您可能还会发生什么,因为您没有包括足够的数据来做进一步的调查。

© www.soinside.com 2019 - 2024. All rights reserved.