我正在尝试使用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
导入了它。
答案 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
我的数据框。