2016-05-17 46 views
-2

我有一個數據框有兩列:xy。每列可以存儲'A','B'或NA。R:檢查是否有值在列

df = data.frame(
    x = c('A', NA, 'B', 'A', NA), 
    y = c('B', NA, 'B', 'A', 'A') 
) 

如何創建一個is_a柱告訴如果xy等於 'A'?

從前面的例子中,結果將是:

df$is_a = c(T, F, F, T, T) 
+0

不會因爲它會讓NA成爲'A',你可以使用'ifelse'賦值。看看那個。 – Gopala

+0

如何管理NA? – psql

回答

1

我們需要使用!is.na(x)!is.na(y)使NA值返回FALSE

with(df, x=="A" & !is.na(x)|y=="A" & !is.na(y)) 
#[1] TRUE FALSE FALSE TRUE TRUE 

或者另一種選擇是

with(df, 1:nrow(df) %in% which(x=="A" | y =="A")) 
#[1] TRUE FALSE FALSE TRUE TRUE 
-1

使用dplyr庫,th E類功能變異..

yourDataFrame <- yourDataFrame %>% mutate(is_a = (x=='A')||(y=='A')) 

如果X或Y爲假,如果兩者都NA或B.

+0

爲什麼用'||'代替'|'? – psql

+0

它不工作我有真正到處: 'DF%>%突變(is_a =(X == 'A')||(Y == 'A')) XY is_a 1 AB TRUE TRUE 3 BB TRUE 4 AA TRUE TRUE' – psql

0
Add a variable to df dataframe and use ifelse statement 
    df$is_a <- ifelse((grepl("A",df$x)|grepl("A",df$y)),T,F) 
    [1] TRUE FALSE FALSE TRUE TRUE 
0

另外還有一個可能性:

df$is_a <- !!rowSums(ifelse(is.na(df), 0, df=="A")) 
#> df$is_a 
#[1] TRUE FALSE FALSE TRUE TRUE