【问题标题】:How do you clear column elements from an R data frame based off of other another columns elements in the same data frame?如何根据同一数据框中的其他其他列元素从 R 数据框中清除列元素?
【发布时间】:2016-05-10 23:35:50
【问题描述】:

我有以下数据框

>data.frame

col1    col2
          A
  x       B
          C
          D
  y       E

我需要一个新的数据框,如下所示:

>new.data.frame

  col1    col2
           A
   x       
           C
           D
   y       

我只需要一种从 col1 读取的方法,如果 Col1 中有任何字符,则清除 col2 的相应行值。我正在考虑为此使用 if 语句和 data.table,但不确定如何根据 col1 中存在的任何字符传递删除 col2 值的信息。

【问题讨论】:

    标签: r


    【解决方案1】:

    这样的工作:

    # Create data frame
    dat <- data.frame(col1=c(NA,"x", NA, NA, "y"), col2=c("A", "B", "C", "D", "E"))
    
    # Create new data frame
    dat_new <- dat
    dat_new$col2[!is.na(dat_new$col1)] <- NA
    
    # Check that it worked
    dat
    dat_new
    

    【讨论】:

    • 感谢您按需要工作。比我想象的要简单得多。
    【解决方案2】:

    这取决于您所说的“删除”是什么意思。这里我假设一个空白字符串""。但是,同样的原则也适用于NAs

    ## create data frame
    df <- data.frame(col1 = c("", "x", "","", "y"),
                    col2 = LETTERS[1:5], 
                    stringsAsFactors = FALSE)
    
    df
    #   col1 col2
    # 1         A
    # 2    x    B
    # 3         C
    # 4         D
    # 5    y    E
    
    ## subset by blank values in col1, and replace the values in col2
    df[df$col1 != "",]$col2 <- ""
    ## or df$col2[df$col1 != ""] <- ""
    df
    #    col1 col2
    # 1         A
    # 2    x     
    # 3         C
    # 4         D
    # 5    y     
    

    正如你提到的data.table,代码是

    library(data.table)
    
    setDT(df)
    ## filter by blank entries in col1, and update col2 by-reference (:=)
    df[col1 != "", col2 := ""]
    df
    

    【讨论】:

    • 谢谢。我喜欢这两种解决方案。
    【解决方案3】:

    使用dplyr

    library(dplyr)
    df %>%
         mutate(col2 = replace(col2, col1!="", ""))
    #     col1 col2
    #1         A
    #2    x     
    #3         C
    #4         D
    #5    y     
    

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2017-11-21
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      相关资源
      最近更新 更多