合并相同数据框中的列

时间:2015-07-30 11:21:48

标签: r merge dataframe

我有一个数据框,如下所示:

df =  
A    B    C    D    E     F
1    NA   NA   10.2 8.9   abc
2    NA   NA   65.1 7.6   def
3    76.1 10.1 NA   NA    ghi
4    10.1 10.4 NA   NA    jkl
5    NA   NA   NA   NA    mno

最后,我需要它看起来像这样:

df = 
A    B    C    F   
1    10.2 8.9  abc
2    65.1 7.6  def
3    76.1 10.1 ghi
4    10.1 10.4 jkl
5    NA   NA   mno

NAC中的所有D都需要替换为DE中的值(如果它们有值)!所有其他列都需要保留!

2 个答案:

答案 0 :(得分:2)

ifelse在这些情况下效果很好。

library(dplyr)
mutate(df, B = ifelse(is.na(B), D, B),
           C = ifelse(is.na(C), E, C))

答案 1 :(得分:1)

使用base R,这应该既快又可扩展(对很多列):

foo <- function(x, y) pmax(x, y, na.rm=TRUE)
cols1 = c("B", "C")
cols2 = c("D", "E")

df[, cols1] = with(df, Map(foo, mget(cols1), mget(cols2)))
df = df[, !(names(df) %in% cols2), drop = FALSE]

或使用data.table v1.9.5的相同概念 - 安装说明here

require(data.table) # v1.9.5+
setDT(df)[, (cols1) := Map(foo, mget(cols1), mget(cols2))][, (cols2) := NULL]

这个想法很简单。每个列对使用pmax na.rm=TRUE,一次使用Map()