R 如何组合一些列?

R 如何组合一些列?,r,dataframe,R,Dataframe,我有3个专栏,如下所示: col1 col2 col3 1 NA NA NA 3 NA NA NA NA 3 NA NA 我怎样才能把这三个栏目合并成一个新栏目 col1 col2 col3 new 1 NA

我有3个专栏,如下所示:

        col1    col2    col3
          1       NA       NA
          NA      3        NA 
          NA      NA       NA
          3       NA       NA
我怎样才能把这三个栏目合并成一个新栏目

        col1    col2    col3       new
          1       NA       NA       1
          NA      3        NA       3
          NA      NA       NA       NA
          3       NA       NA       3

请注意,它们没有交集,这意味着如果其中一个是数字2,那么其他的是NA

假设您的数据帧称为df

我应该回答你的问题


pmin函数获取每行三列中的最小值,na.rm=TRUE忽略na值,因此,如果按行最多只有一个非na值,这应该可以工作。

假设您的数据帧称为df

我应该回答你的问题

pmin函数获取每行三列中的最小值,na.rm=TRUE忽略na值,因此,如果按行,您最多只有一个非na值,这应该可以工作。

我们可以使用max.col获取每行中的非na值

df$new <- df[cbind(seq_len(nrow(df)), max.col(!is.na(df)))]

df
#  col1 col2 col3 new
#1    1   NA   NA   1
#2   NA    3   NA   3
#3   NA   NA   NA  NA
#4    3   NA   NA   3
如果一行中有超过1个不是NA的值,则可能需要根据您的要求查看max.col的ties.method

我们可以使用max.col来获取每行中的非NA值

df$new <- df[cbind(seq_len(nrow(df)), max.col(!is.na(df)))]

df
#  col1 col2 col3 new
#1    1   NA   NA   1
#2   NA    3   NA   3
#3   NA   NA   NA  NA
#4    3   NA   NA   3
如果一行中有超过1个不是NA的值,则可能需要根据您的要求查看max.col的ties.method

我们也可以使用来自dplyr的合并

或者不指定列名

df1 %>% 
    mutate(new = coalesce(!!! .))
还是减少

数据 我们还可以使用来自dplyr的合并

或者不指定列名

df1 %>% 
    mutate(new = coalesce(!!! .))
还是减少

数据 另外df$new也df$new
library(purrr)
df1 %>%
    mutate(new = reduce(., coalesce))
df1 <- structure(list(col1 = c(1L, NA, NA, 3L), col2 = c(NA, 3L, NA, 
NA), col3 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_
)), row.names = c(NA, -4L), class = "data.frame")