R 根据列之间建立的关系,完成部分填充列

R 根据列之间建立的关系,完成部分填充列,r,R,我希望完成一个两列,这是基于对方,但他们是部分填补 title <- c("Mrs", "Ms", "", "Ms", "Mr", "Mr", "") gender <- c("female", "", "male", "female", "", "Male", "female") df <- as.data.frame(cbind(title, gender)) df title gender 1 Mrs female 2 Ms

我希望完成一个两列,这是基于对方,但他们是部分填补

 title <- c("Mrs", "Ms", "", "Ms", "Mr", "Mr", "")
 gender <- c("female", "", "male", "female", "", "Male", "female")

 df <- as.data.frame(cbind(title, gender))

 df 

    title gender
 1   Mrs female
 2    Ms       
 3         male
 4    Ms female
 5    Mr       
 6    Mr   Male
为此,我们知道两个字母(例如,
i
u
)是成对的。但是,缺少一些数据值,其中一列部分完成或为空。如何填写本例中部分完成的值


(我知道我应该向大家展示我是如何努力做到这一点的,但我被难住了,什么也找不到)

我想这就是你想要的:

#Find those where there is no title
noTitle = which(df$title=="")
#And fill them in based on the gender
df$title[noTitle] = ifelse(grepl("[Ff]",df$gender[noTitle]), "Ms", "Mr")
#Do the same for gender
noGender = which(df$gender=="")
df$gender[noGender] = ifelse(grepl("[Ss]",df$title[noGender]), "female", "male")
如果它们都是空的,那么将有一个检查开始,并根据需要转换它们;比如:

#Find where both empty
Neither = intersect( which(df$title=""), which(df$gender=="") )
##Do something here

会不会有这样一种情况,它们可能都是空的?不会,但我很好奇,如果是这样的话,答案会有什么变化!如果没有“女性”的标签名称,你会怎么做。数据有两种可能。你如何在“女士”和“女士”之间做出决定?正如我所写的(但我想我不清楚,对不起!),如果性别是女性,那么标题就是“女士”。尽管标题可以是“Ms”或“Mrs”,然后性别将是女性。旁注:我还没有在stack overflow上发布那么多,我真的不知道为什么这会被否决?它是太简单还是太重复了?我只是想确保我不再犯同样的错误!
#Find where both empty
Neither = intersect( which(df$title=""), which(df$gender=="") )
##Do something here