【发布时间】:2019-11-05 00:26:19
【问题描述】:
我正在尝试将我创建的男性和女性列合并为一列。我尝试使用我在堆栈上找到的一些答案,但我查询的第二个性别被排除在外。
构建数据框:
ID <- 1:10
SPAYDT <- c("", "2011-12-01", "", "2006-05-01", "", "", "", "", "", "")
SPAYDTU <- c(1, NA, NA, NA, NA, NA, NA, NA, NA, NA)
NEUTDT <- c("", "", "", "", "", "", "2013-03-01", "", "", "")
NEUTDTU <- c(NA, NA, NA, NA, NA, NA, NA, 1, NA, NA)
df <- as.data.frame(cbind(ID, SPAYDT, SPAYDTU, NEUTDT, NEUTDTU))
df
目标是有一个性别列,格式为具有 2 个级别的因素 - 男性和女性 如果 SPAYDT 或 SPAYDTU 在其中具有值,则应为女性,如果 NEUTDT 或 NEUTDTU 在其中具有值,则应为男性。 我尝试过的:
- 使用嵌套的 if-else 语句构建一个性别列
- 制作两列,然后使用合并
df$male <- ifelse(NEUTDT!="", "Male",
ifelse(NEUTDTU=1, "Male", NA))
df$female <- ifelse(SPAYDT!="", "Female",
ifelse(SPAYDTU==1, "Female", NA))
df$sex <- ifelse(!is.na(df$female), df$female, df$male)
和
df$sex <- ifelse(SPAYDT!="", "Female",
ifelse(SPAYDTU==1, "Female",
ifelse(NEUTDT!="", "Male",
ifelse(NEUTDTU=1, "Male", NA))))
但是,无论我做什么,最后的性别栏都只有一种性别。我确保附加了我的 df 以将列名用作变量。我尝试重新启动 R 并再次运行设置代码。我只是不知道为什么 ifelse 语句忽略了第二性输入。
非常感谢任何帮助!
说明: 在我正在使用的较大数据框中,我已经完成了数据清理,以便每个 ID 仅对应于 1 个性别。很抱歉代码中的错误。
期望的输出:
ID <- 1:10
SPAYDT <- c("", "2011-12-01", "", "2006-05-01", "", "", "", "", "", "")
SPAYDTU <- c(1, NA, NA, NA, NA, NA, NA, NA, NA, NA)
NEUTDT <- c("", "", "", "", "", "", "2013-03-01", "", "", "")
NEUTDTU <- c(NA, NA, NA, NA, NA, NA, NA, 1, NA, NA)
SEX <- c("Female", "Female", NA, "Female", NA, NA, "Male", "Male", NA, NA)
df <- as.data.frame(cbind(ID, SPAYDT, SPAYDTU, NEUTDT, NEUTDTU, SEX))
df
【问题讨论】:
-
根据定义,一列有一个值。您想如何处理同时分配两个性别的情况?
-
您确定您已正确创建数据框吗?我认为在最后一行应该是
cbind而不是rbind。您还可以使用预期的输出更新您的帖子吗?
标签: r if-statement multiple-columns