2015-08-28 19 views
0

我是R(2周)的新手,想弄清楚以下幾點:匹配R中的2列,省略其中一個變量條目爲「。」的情況。

行號與其他列不匹配。即AA == BB。我知道如何使用ifelse函數並使用此代碼:

df$check <- ifelse(df$var1== 1 & df$var2== 1,1,0) 
df[df$check==0,] 

這標識了不是這種情況的行。唯一的問題是我有df$var2中的條目是「。」的情況。我只想得到行號df$var1 == 1df$var2 == 0(反之亦然)。使用上面的代碼包括:df$var1 == 1df$var2 == "."

+0

你應該包含一些你的數據(例如粘貼在頭部(df))和你想要的輸出。 – jeremycg

+0

學習'ifelse'的目標是?因爲根據你對'ifelse'的使用,你可以完全省略它,因爲'<邏輯向量>&<邏輯向量>'將返回完全適合數據幀子集的邏輯向量。 – Tensibai

+0

根據你的描述,做成很短的df [df $ var%%c(0,1)&df $ var2%%c(0,1),]'說明:'df $ var1%in%c 0,1)'將返回行的邏輯向量,其中'df $ var1'爲0或1,對於var2是相同的,將與&相結合,並且您獲得所有行,其中var1和var 2爲0或1 – Tensibai

回答

0

您可以在ifelse語句的else部分嵌套另一個ifelse。

Ifelse(因爲你擁有它,1,ifelse(DF $ VAR2 == 「」,2,0))

然後繼續把它帶在身邊。

「哪個」功能可能是您最好的選擇。

選擇=其中(DF $ VAR1!= DF $ VAR2 & DF $ VAR2!= 「」) DF [選擇,]

!=表示不等於

+1

請格式化代碼...(使用按鈕,一旦文本被選中或按Ctrl + K) – Tensibai

0

評論的長版具有正匹配

!(vector %in% another_vector)

實施例的代碼:(當然也可以與!逆的%in%匹配這樣

set.seed(123) # Fix the generator 
#Build the data frame 
df <- data.frame(var1 = sample(c(0,1),30,replace=T), var2=sample(c(0,1,"."),30,replace=T)) 

lv1 <- df$var1 %in% c(0,1) # First logical vector 
lv2 <- df$var2 %in% c(0,1) # Same as lv1 

slv <- lv1 & lv2 # combine them 

df[slv,] #Do the select 

生成的DF看起來像(第6行30):

> head(df) 
    var1 var2 
1 0 . 
2 1 . 
3 0 . 
4 1 . 
5 1 0 
6 0 1 

LV2的樣子(我讓你自己看其他大號 ogical V ectors變量:

> lv2 
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[18] TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE 

以及最終輸出:

> df[slv,] #Do the select 
    var1 var2 
5  1 0 
6  0 1 
8  1 0 
9  1 0 
10 0 0 
11 1 0 
12 0 1 
13 1 1 
14 1 1 
15 0 0 
16 1 0 
17 0 0 
18 0 1 
19 0 0 
21 1 0 
22 1 1 
24 1 0 
25 1 1 
26 1 0 
27 1 0 
30 0 1 
相關問題