2016-05-10 89 views
0

我已經將數據幀以下如何基於同一數據框中的其他列元素從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中存在的ANY字符來中繼刪除col2值的信息。

回答

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 
+0

感謝您根據需要運作。比我想象的要簡單得多。 – ryry

1

這取決於你的意思是'刪除'。在這裏,我假設一個空字符串""。然而,同樣的原則將適用於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 
+0

謝謝。我喜歡兩種解決方案。 – ryry

1

使用dplyr

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