【问题标题】:R - Coalesce dataframe while creating a new variable with column names [duplicate]R - 在创建具有列名的新变量时合并数据框[重复]
【发布时间】:2020-11-16 05:43:06
【问题描述】:

我正在使用dplyr::coalescedplyr::mutate 来查找所有第一个非缺失值并将其填充到一个新变量中。但是,我还想创建一个新变量,其中包含有关哪个变量用于填充新变量的信息。

这是一个例子:

df <- dataframe(
      St1 = c(1, NA, NA, NA),
      St2 = c(NA, 3, NA, NA), 
      St3 = c(NA, NA, 12, NA),       
      St4 = c(NA, NA, NA, 4))

What I do : 

df <- df %>%
  mutate(df.coalesce = coalesce(St1, St2, St3, St4)) %>%
  select(df.coalesce)

Result: 

df.coalesce
1
3
12
4

Desired result: 

Station df.coalesce
St.1    1
St.2    3
St.3    12
St.4    4   

有没有办法使用 tidyverse 语法来做到这一点?

谢谢!

【问题讨论】:

    标签: r dplyr coalesce


    【解决方案1】:

    您可以使用max.col 获取每行中具有非NA 值的列名,并使用do.callcoalesce 将其应用于所有列。

    library(dplyr)
    
    df %>%
      transmute(Station = names(df)[max.col(replace(., is.na(.), 0))], 
                df.coalesce = do.call(coalesce, .))
    
    #  Station df.coalesce
    #1     St1           1
    #2     St2           3
    #3     St3          12
    #4     St4           4
    

    【讨论】:

      【解决方案2】:

      您可以找到所有具有 NA 的 id,然后将其删除。

      train <- read.csv (file = "file", sep = ",", na.strings=c("NA"))
      id_na_Cols <- sapply(train,function(x)any(is.na(x)))
      trainData <- train[,!(id_na_Cols)]
      write.table (trainData, file = "file_new", sep = ",")
      

      之后,您可以加载新数据以进行进一步分析。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-04
        • 2012-02-02
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        相关资源
        最近更新 更多