2015-11-07 116 views
1

我有因子變量如何根據邏輯條件創建邏輯變量?

> a <- c("a", "b", "c") 
> b <- c("c", "b", "a") 
> df <- as.data.frame(cbind(a,b)) 
> df$a <- as.factor(df$a) 
> df$b <- as.factor(df$b) 
> df 
    a b 
1 a c 
2 b b 
3 c a 

我創建基於VAR和變種B的相似性新邏輯變量的數據幀。

> df$result <- isTRUE(df$a == df$b) 

但我得到的結果是:

> df 
    a b result 
1 a c FALSE 
2 b b FALSE 
3 c a FALSE 

當我預計

> df 
    a b result 
    1 a c FALSE 
    2 b b TRUE 
    3 c a FALSE 

(我使用的因素來複制我的真實數據)

我在做什麼錯誤?我如何實現識別類似變量的目標?由於

回答

3

只是做

df$result <- with(df, a==b) 
df 
# a b result 
#1 a c FALSE 
#2 b b TRUE 
#3 c a FALSE 

a==b已經返回一個邏輯向量,我們並不需要isTRUE來包裝它。

由於@Frank在評論中提到,最好在character類列之間進行評估,因爲factor級別的差異會導致錯誤。我們可以轉換到factorcharacter評估

with(df, as.character(a)==as.character(b)) 

或使水平相同兩列

Un1 <- union(levels(df$a), levels(df$b)) 
df[] <- lapply(df, factor, levels=Un1) 
with(df, a==b) 
+0

十分感謝@akrun,這工作!用()可靠地在函數中使用嗎? – jpinelo

+0

@jpinelo我想它應該工作。我使用'with'來避免每次調用'df $'。順便說一句,如果你在函數內部使用這個,避免使用'$',而是使用''' – akrun

+0

當然,非常感謝@akrun。當然是 – jpinelo