【问题标题】:Ifelse NULL: obtaining numeric instead of string valuesIfelse NULL:获取数字而不是字符串值
【发布时间】:2019-04-02 15:12:10
【问题描述】:

这似乎很容易做到,但我找不到答案。我的数据框中有两个关于区域名称的变量。我想使用这两个变量创建一个最终的区域变量。如果 Area2 缺失,则只使用 Area1 值,但如果 Area2 没有缺失,则使用 Area2 值。

Area    Area2  Goal
ABC            ABC
ABC            ABC
AAA     AAA    AAA
AA-A    AAA    AAA
A AA    AAA    AAA

data <- data.frame(Area1 = c("ABC", "ABC", "AAA", "AA-A", "A AA"),
                   Area2 =c("", "", "AAA", "AAA", "AAA"))

我的尝试如下,但我正在获取最终变量的数值而不是字符串值(即使使用 as.factor 选项)。

data$AreaFinal <- ifelse(is.na(data$Area2), data$Area1, data$Area2)
data$AreaFinal <- ifelse(is.na(data$Area2), as.factor(data$Area1), data$Area2)

这段代码看起来没问题吗?在我的真实数据中,Area1 是一个因子,Area 2 是一个字符。

提前感谢您! 马文

【问题讨论】:

  • 我认为你需要 stringsAsFactors = FALSEdata.frame 打电话顺便说一句,你没有 NA elements。它是 "" 。条件应该是ifelse(data$Area2 == "", data$Area1, data$Area2)# [1] "ABC" "ABC" "AAA" "AAA" "AAA"
  • 要做第一部分“stringsAsFactors = FALSE i the data.frame”。我做了 data
  • 第二个ifelse 看起来不错。如果因子水平(Area1Area2)不同,则会引发警告。
  • Hi Rui 感谢您抽出宝贵的时间。我尝试了很多东西,但仍然无法得到它。你会怎么做?

标签: r if-statement na dplyr


【解决方案1】:

解决方案是将我的 Area1 变量从因子转换为字符 data$area1&lt;- as.character(data$area1) 。然后data$areafinal&lt;- with(data, ifelse(is.na(area), area1, area2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多