【发布时间】:2021-08-15 16:38:11
【问题描述】:
所以我在 R 中合并了两个数据框:
第一个:
| Ministry | Meeting | Perso_or_Public |
|---|---|---|
| Ministry A | Meeting 1 | Personnal |
| Ministry A | Meeting 2 | Public |
| Ministry A | Meeting 3 | Public |
| Ministry B | Meeting 1 | Personnal |
| Ministry B | Meeting 2 | Personnal |
| NA | Meeting 2 | Personnal |
第二个:
| Ministry | Meeting | Guest | Minister_Gender |
|---|---|---|---|
| Ministry A | Meeting 1 | Alexander | MAN |
| Ministry A | Meeting 2 | Jane | MAN |
| Ministry A | Meeting 3 | Antonio | MAN |
| Ministry B | Meeting 1 | Jessica | WOMAN |
| Ministry B | Meeting 2 | Camilla | WOMAN |
| NA | Meeting 2 | NA | NA |
输出:
dfA <- merge(df1, df2, by=c("Ministry","Meeting"), all.x=TRUE)
| Ministry | Meeting | Perso_or_Public | Guest | Minister_Gender |
|---|---|---|---|---|
| Ministry A | Meeting 1 | Personnal | Alexander | NA |
| Ministry A | Meeting 2 | Public | Jane | NA |
| Ministry A | Meeting 3 | Public | Antonio | NA |
| Ministry B | Meeting 1 | Personnal | Jessica | WOMAN |
| Ministry B | Meeting 2 | Personnal | Camilla | WOMAN |
| NA | Meeting 2 | Personnal | NA | NA |
如您所见,“A 部”的部长性别有问题,我真的不明白为什么,因为没有错字或任何其他问题(我检查了所有内容 -> 没有多余的空格等) .我尝试了以下方法:
dfA <- dfA %>% mutate(Minister_Gender=ifelse(Ministry=='Ministry A', "MAN", Minister_Gender))
#doesn't work
dfA$Minister_Gender <- dfA$Minister_Gender[1:3] <- "MAN"
#tried to mutate by row index
#writes MAN in all the Minister_Gender column
我不能使用带有 is.na() 的 mutate 命令,因为 Minister_Gender 列中的 NA 也涉及其他部门。 所以我想知道你们中是否有人知道如何根据行数进行变异,但比我尝试的方法更好;或任何其他可行的方法。
更新
dfB <- subset(dfA, Ministry=="Ministry A")
#0 obs
dfC <- subset(df1, Ministry=="Ministry A")
#0 obs
【问题讨论】:
-
您能否分享您的数据示例,而不仅仅是屏幕截图/表格? stackoverflow.com/help/minimal-reproducible-example
-
请分享
dput(dfA[1:6, ])和dput(df1[1:6, ])(或任何您输入的数据框名称)。尽管您检查了额外的空格,但对于您所看到的结果,对我来说唯一有意义的是这些问题。 -
我做了一个输入,确实,数据集中显示的名字不是“真实的”!
标签: r dataframe merge na dplyr