【问题标题】:Merging / combining columns is not working at all合并/组合列根本不起作用
【发布时间】:2020-09-03 04:01:41
【问题描述】:

我一辈子都想不出一种方法来让这个工作不改变列的类或获得一个甚至不在原始列中的随机级别!

我的数据如下所示:

data <- structure(list(WHY = structure(1:4, .Label = c("WHY1", "WHY2", 
"WHY3", "WHY4"), class = "factor"), HELP1 = structure(c(3L, NA, 
1L, 2L), .Label = c("1", "2", "D/A"), class = "factor"), HELP2 = c(NA, 
2L, NA, NA)), class = "data.frame", row.names = c(NA, -4L))

我想做什么: 如果 HELP 2 不是 NA 并且如果 HELP1 是 D/A 则合并列而不更改类。

这是我尝试过的:

data$HELP3 <-
  ifelse(
    !is.na(data$HELP2) &
      data$HELP1 == "D/A",
        data$HELP1, data$HELP2)

结果:

     data
   WHY HELP1 HELP2 HELP3
1 WHY1   D/A    NA    NA
2 WHY2  <NA>     2    NA
3 WHY3     1    NA    NA
4 WHY4     2    NA    NA
> 

如果能提供任何帮助,我将不胜感激。我已经在堆栈溢出上 5 个小时了,而且还没有完成这项工作:(我对 dyplr 不是很热,所以一个 base r 或其他任何东西都会很棒!

【问题讨论】:

  • 在本例中,您的预期输出将是 HELP3 列与 HELP1 相同?
  • 嗨 @RonakShah 是的,理想情况下我只有 HELP 1,如果它是 NA,那么我会从 HELP 2 中提取值(如果有的话)。我刚刚更新,因为我将 if else 语句的最后一点放在了前面。
  • 如果你想这样做 如果帮助 1 中存在值,则从帮助 1 中获取值,否则你可以使用 dplyr::coalesce(data$HELP1, data$HELP2) 但这不考虑 data$HELP1 == "D/A"

标签: r merge


【解决方案1】:

由于HELP2HELP1 具有不同的类,并且ifelse 也有返回factor 类的向量的问题。但是,您可以在不使用 ifelse 且不更改列类的情况下执行此操作。

data$HELP3 <- data$HELP1
inds <- (!is.na(data$HELP2)) & data$HELP1 == "D/A"
data$HELP3[inds] <- data$HELP2[inds]

【讨论】:

  • 你是个天才!我希望我在几个小时前发布寻求帮助。非常感谢,我说不出我有多感激。
猜你喜欢
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2018-11-09
  • 2020-08-18
  • 2017-08-31
  • 2014-11-20
  • 2011-03-13
  • 2017-05-07
相关资源
最近更新 更多