首页 文章

如何根据同一数据框中的其他列元素清除R数据框中的列元素?

提问于
浏览
0

我有以下数据框架

>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值的信息 .

3 回答

  • 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
    
  • 1

    这取决于你的意思'remove' . 这里我假设一个空字符串 "" . 但是,同样的原则适用于 NA

    ## 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
    
  • 2

    使用 dplyr

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

相关问题