R数据帧 - 将小区值转换为NA小区

时间:2016-11-18 18:31:24

标签: r

我正在尝试使用R来操纵一些数据帧,并且我一直在遇到障碍。我从数据框femaleDF开始,有三列:Product Name,Person.1,Person.2。

数据框的行数如下:

'E0001', 'John Smith-M', 'Jane Smith-F'

我想要的是将性别分成两个不同的数据帧。我使用grepl搜索'-M'从女性列表中删除了男性,所以现在我有类似的内容:

'E0001', NA, 'Jane Smith-F'

但是现在我想将女性值从Person.2转移到Person.1,如果Person.1 == NA。这是我到目前为止所做的:

female.strip <- function(femaleDF) {     
increment <- 1
repeat {
  if(is.na(femaleDF$Person.1[increment])==TRUE) {
    femaleDF$Person.1[increment] <- femaleDF$Person.2[increment]
    femaleDF$Person.2[increment] <- NA
    increment <- increment + 1
 } else {increment <- increment + 1}
if(increment > nrow(femaleDF)){
    break
    }
 }
}
femaleDF <- female.strip(femaleDF)

我认为我在尝试重新分配值的行中某处出错:femaleDF$Person.1[increment] <- femaleDF$Person.2[increment]

我得到的错误看起来像是 1: In [<-.factor(*tmp*, increment, value = structure(c(282L, ... : invalid factor level, NA generated

我敢肯定,如果我对R基础知识有更多了解,这将是一件轻而易举的事,但任何人都可以帮助我吗?谢谢!

修改 not the same as this question。我没有创建数据框,我用[<-.factor导入了它。

1 个答案:

答案 0 :(得分:0)

嗯,我已经解决了,但我完全迷失了解决方法的原因和原因。以下代码有效:

female.strip <- function(femaleDF) {     
 increment <- 1
 repeat {
  if(is.na(femaleDF$Person.1[increment])==TRUE){
   femaleDF$Person.1[increment] <- femaleDF$Person.2[increment]
   femaleDF$Person.2[increment] <- NA
   }
  increment <- increment + 1
  if(increment > nrow(femaleDF)){
   break
   }
 }
 return(femaleDF)
}

我感到愚蠢,我忘了return我的数据框。