合并列以删除NA [英] Combine column to remove NA's

查看:67
本文介绍了合并列以删除NA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在R中有一些列,每一行中只有一个值,其余的将是NA.我想将这些与非NA值合并为一列.有谁知道这样做的简单方法.例如,我可能有以下内容:

I have some columns in R and for each row there will only ever be a value in one of them, the rest will be NA's. I want to combine these into one column with the non-NA value. Does anyone know of an easy way of doing this. For example I could have as follows:

data <- data.frame('a' = c('A','B','C','D','E'),
                   'x' = c(1,2,NA,NA,NA),
                   'y' = c(NA,NA,3,NA,NA),
                   'z' = c(NA,NA,NA,4,5))

所以我会

'a' 'x' 'y' 'z'  
 A   1   NA  NA  
 B   2   NA  NA  
 C  NA   3   NA  
 D  NA   NA  4  
 E  NA   NA  5

我会得到

 'a' 'mycol'  
  A   1  
  B   2  
  C   3  
  D   4  
  E   5  

包含NA的列的名称根据查询中前面的代码而变化,因此我将无法显式调用列名称,但是我将包含NA的列的列名称存储为向量,例如在此示例cols <- c('x','y','z')中,因此可以使用data[, cols]调用列.

The names of the columns containing NA changes depending on code earlier in the query so I won't be able to call the column names explicitly, but I have the column names of the columns which contains NA's stored as a vector e.g. in this example cols <- c('x','y','z'), so could call the columns using data[, cols].

任何帮助将不胜感激.

谢谢

推荐答案

基于dplyr::coalesce的解决方案可能是:

A dplyr::coalesce based solution could be as:

data %>% mutate(mycol = coalesce(x,y,z)) %>%
         select(a, mycol)
#   a mycol
# 1 A     1
# 2 B     2
# 3 C     3
# 4 D     4
# 5 E     5 

数据

data <- data.frame('a' = c('A','B','C','D','E'),
                 'x' = c(1,2,NA,NA,NA),
                 'y' = c(NA,NA,3,NA,NA),
                 'z' = c(NA,NA,NA,4,5))

这篇关于合并列以删除NA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆