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

时间:2016-05-10 23:35:50

标签: r

我有以下数据框

>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 个答案:

答案 0 :(得分:2)

这样的工作:

# 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 :(得分:1)

这取决于'删除'的含义。这里我假设一个空字符串""。但是,同样的原则适用于NA s

## 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 :(得分:1)

使用dplyr

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