将具有交替缺失值的两个字符串列合并为一个

时间:2015-01-08 22:02:31

标签: r

我的数据框有两列“a”和“b”,交替缺失值(NA

a      b
dog    <NA>
mouse  <NA>
<NA>   cat
bird   <NA>

我想“合并”/将它们组合到一个看起来像这样的新列c,即每行中的非NA元素被选中:

c
dog
mouse
cat
bird

我尝试了mergejoin,但都没有按照我的意愿行事。也许是因为我没有合并的id?对于整数,我只是绕过这个并添加两列,但在我的情况下如何?

7 个答案:

答案 0 :(得分:8)

您可以尝试pmax

df$c <- pmax(df$a, df$b)
df
#       a    b     c
# 1   dog <NA>   dog
# 2 mouse <NA> mouse
# 3  <NA>  cat   cat
# 4  bird <NA>  bird

...或ifelse

df$c <- ifelse(is.na(df$a), df$b, df$a)

对于包含两列以上列表的更一般的解决方案,您可以找到几种在R here中实现合并的方法。

答案 1 :(得分:4)

我为这种类型的任务写了一个coalesce()函数,它的工作方式与SQL coalesce函数非常相似。你会像

一样使用它
dd<-read.table(text="a      b
dog    NA
mouse  NA
NA   cat
bird   NA", header=T)

dd$c <- with(dd, coalesce(a,b))
dd
#       a    b     c
# 1   dog <NA>   dog
# 2 mouse <NA> mouse
# 3  <NA>  cat   cat
# 4  bird <NA>  bird

答案 2 :(得分:3)

这是我的尝试(由@MrFlick修改)

df$c <- apply(df, 1, function(x) na.omit(x)[1])
df
#       a    b     c
# 1   dog <NA>   dog
# 2 mouse <NA> mouse
# 3  <NA>  cat   cat
# 4  bird <NA>  bird

答案 3 :(得分:3)

另一种选择是将whicharr.ind=TRUE

一起使用
indx <- which(!is.na(df), arr.ind=TRUE)
df$c <-  df[indx][order(indx[,1])]
df
#    a    b     c
#1   dog <NA>   dog
#2 mouse <NA> mouse
#3  <NA>  cat   cat
#4  bird <NA>  bird

或者

df$c <- df[cbind(1:nrow(df),max.col(!is.na(df)))]

答案 4 :(得分:2)

1 ENG-101 English 2 CS-103 Computer Science 3 MAT-101 Algebra 4 GS-102 Geography Studies 正是您所需要的功能dpyr

coalesce()

答案 5 :(得分:2)

使用if else逻辑:

[AllowAnonymous]
[Route("autoupdate")]
public async Task<IActionResult> ProfileWebhook()
{
    var formData = await this.Request.ReadFormAsync();

    var config = TelemetryConfiguration.CreateDefault();
    var client = new TelemetryClient(config);

    client.TrackException(new Exception(string.Join("~", formData.Keys)));
    logger.LogError(new Exception(string.Join("~", formData.Keys)), "Fail");
    throw new Exception(string.Join("~", formData.Keys));
}

答案 6 :(得分:1)

您可以使用简单的apply

df$c <- apply(df,1,function(x)  x[!is.na(x)]  ) 

> df
      a    b     c
1   dog <NA>   dog
2 mouse <NA> mouse
3  <NA>  cat   cat
4  bird <NA>  bird