【问题标题】:Dataframe NA conversion to specific items数据框 NA 转换为特定项目
【发布时间】:2020-02-05 09:48:47
【问题描述】:

我有一个像这样的数据框;

dataframe <- data.frame(ID1=c(NA,2,3,1,NA,2),ID2=c(1,2,3,1,2,2))

现在我想将 NA 值转换为与下一列有价值的值相同的值;

dataframe <- data.frame(ID1=c(1,2,3,1,2,2),ID2=c(1,2,3,1,2,2))

我想我应该使用if 函数,但我想使用%&gt;% 来简化。 请教我。

【问题讨论】:

  • dataframe$ID1[is.na(dataframe$ID1)] &lt;- dataframe$ID2[is.na(dataframe$ID1)]

标签: r dataframe na


【解决方案1】:

ifelse 解决方案

dataframe <- within(dataframe, ID1 <- ifelse(is.na(ID1),ID2,ID1))

这样

> dataframe
  ID1 ID2
1   1   1
2   2   2
3   3   3
4   1   1
5   2   2
6   2   2

【讨论】:

    【解决方案2】:

    一个简单的解决方案是找出ID1 中的NA 值并将它们替换为ID2 中的相应值。

    inds <- is.na(dataframe$ID1)
    dataframe$ID1[inds] <- dataframe$ID2[inds]
    

    但是,由于您想要一个带有管道的解决方案,您可以使用来自dplyrcoalesce

    library(dplyr)
    dataframe %>%  mutate(ID1 = coalesce(ID1, ID2))
    
    #  ID1 ID2
    #1   1   1
    #2   2   2
    #3   3   3
    #4   1   1
    #5   2   2
    #6   2   2
    

    【讨论】:

      【解决方案3】:

      dplyr(使用%&gt;%)解决方案:

      sanitized <- dataframe %>% 
        mutate(ID1 = ifelse(is.na(ID1), ID2, ID1))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2020-02-16
        • 2014-09-20
        • 2019-09-15
        • 2018-03-19
        • 2012-03-25
        • 1970-01-01
        相关资源
        最近更新 更多