【问题标题】:R and ifelse functionR 和 ifelse 函数
【发布时间】:2015-07-11 19:49:16
【问题描述】:

我被 R 中的 ifelse 函数困在一个简单的问题参数中。我是 R 的新用户,我正在尝试根据另一列(“第二列”)。

当我尝试ifelse 函数时,我收到了这个错误"argument "no" is missing, with no default"

我所需要的只是:如果测试(条件)为 FALSE,则将值(来自因子变量)原样保留在“第一列”中。

这是我的数据框的示例,它有 ~6000 obs

# 
#       first                                   second third
# 1 Cluster 1                               Chest Pain     1
# 2                           Coronary Artery Diseases     1
# 3 Cluster 6                                   Anemia     5
# 4 Cluster 7 Hypertension and Cerebrovascular Disease     4
# 5              Chronic Obstructive Pulmonary Disease     2
# 6 Cluster 5                                 Diabetes    10

我的尝试是

sample$first= ifelse(sample$second=="Coronary Artery Diseases","Cluster 10",sample$first)

如果第二列中有“冠状动脉疾病”但第一列中的所有剩余 obs 我得到一个数字,则结果是在第一列中填充“第 10 组”。问题是“第一”是一个因素变量,我需要它成为一个因素。

有什么建议吗?

数据

sample <- structure(list(first = c("Cluster 1", "", "Cluster 6", "Cluster 7", 
"", "Cluster 5"), second = c("Chest Pain", "Coronary Artery Diseases", 
"Anemia", "Hypertension and Cerebrovascular Disease", 
"Chronic Obstructive Pulmonary Disease", "Diabetes"), 
third = c("1", "1", "5", "4", "2", "10")), 
.Names = c("first", "second","third"), 
class = "data.frame", row.names = c(NA, -6L))

【问题讨论】:

  • 请出示您的代码。但应该遵循ifelse( (first column is blank), (second column), (first column) ) 或使用子集firstcolumn[ (first column is blank)] &lt;- second column
  • 感谢您的更新,对于您更新中的问题,您可以使用as.character 解决factor 的问题,例如:sample$first= ifelse(sample$second=="Coronary Artery Diseases","Cluster 10", as.character(sample$first))。如果这没有帮助。您能否也发布您的预期结果,谢谢
  • 谢谢!!!有用!但我有一个问题。如果我使用 as.character 函数,它不会改变我的变量的性质,这是一个因素?
  • 是的,它会将其更改为character。您可以将 ifelse 包装在 factor 调用中以将其类改回来。
  • 我明白了!再次感谢您...我如何给您信用..?

标签: r if-statement conditional-statements


【解决方案1】:

由于第一列是一个因素(上面的数据中没有显示),当使用 ifelse 替换值,它强制列中的其他值到因子水平(删除它们的标签)。这可以通过使用 as.character()

来解决
sample$first <-  as.factor(ifelse(sample$second=="Coronary Artery Diseases",
                                   "Cluster 10",as.character(sample$first))

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多