2011-01-18 90 views
2

我是R新手,在使用ifelse()函數時會得到意想不到的結果。這是一個例子。以下是我正在使用的數據框的一個子集。在最後一條命令之後,爲什麼示例$ Points列包含12而不是2?我已經嘗試過許多不同值的示例$ Value,結果總是比我預期的要多10個。R問題:ifelse產生意想不到的結果

例子:

example 
    Question StudentID SchoolID Value Worth Answer Points 
2926  18 101290 84386  2  2  Co  0 
2927  18 100878 84386  2  2  Co  0 
2928  18 100895 84386  1  5  Co  0 
2929  18 100913 84386  2  2  Co  0 
2930  18 100884 84386  2  2  Co  0 
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
example 
    Question StudentID SchoolID Value Worth Answer Points 
2926  18 101290 84386  2  2  Co  12 
2927  18 100878 84386  2  2  Co  12 
2928  18 100895 84386  1  5  Co  11 
2929  18 100913 84386  2  2  Co  12 
2930  18 100884 84386  2  2  Co  12 

我一直在使用的只是再從列減去10的變通,但我想避免這種情況,並獲得這到底是怎麼回事的底部。

任何幫助將不勝感激。謝謝!

+4

你能提供`str(example)`或`dput(例如[2926:2930,])的輸出嗎? – 2011-01-18 21:16:37

+0

你可以在乾淨的R會話中嘗試一下嗎?當我嘗試你的代碼時,我會得到期望的結果。因爲這是一個R函數,所以不要調用數據框`example`;嘗試一個不同的名字。你也可以簡化代碼以使用`within()`;如果我的數據在數據框「DF」中,則DF < - 內(DF,Points < - ifelse(Answer ==「Co」,Value,Points))`將與您的代碼相同,而不必重複所有'DF $`位(在你的情況下是`exmaple $`)。 – 2011-01-18 21:19:24

回答

7

我的猜測是example$Value是一個因素,你得到的是底層代碼而不是標籤。我建議在讀入R後儘快查看數據,以查看導致輸入方法將這些值視爲因子而非整數/數字的原因。

2

我也沒辦法,因爲當我在我的機器上運行此我得到正確的答案:

> print(example) 
    Question StudentID SchoolID Value Worth Answer Points 
1  18 101290 84386  2  2  Co  0 
2  18 100878 84386  2  2  Co  0 
3  18 100895 84386  1  5  Co  0 
4  18 100913 84386  2  2  Co  0 
5  18 100884 84386  2  2  Co  0 
> 
> example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
> 
> print(example) 
    Question StudentID SchoolID Value Worth Answer Points 
1  18 101290 84386  2  2  Co  2 
2  18 100878 84386  2  2  Co  2 
3  18 100895 84386  1  5  Co  1 
4  18 100913 84386  2  2  Co  2 
5  18 100884 84386  2  2  Co  2 

下面是我使用的代碼:

example = read.table('data.txt', header = T) 
print(example) 
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
print(example) 

這裏的data.txt :

Question StudentID SchoolID Value Worth Answer Points 
18 101290 84386  2  2  Co  0 
18 100878 84386  2  2  Co  0 
18 100895 84386  1  5  Co  0 
18 100913 84386  2  2  Co  0 
18 100884 84386  2  2  Co  0 

希望這會有所幫助。當您打印出示例$ Value的類型時會發生什麼?試試這個:

print(typeof(example$Value)) 
[1] "integer" 

如果這是一個因素,那麼這可能會解釋你的奇怪結果。

相關問題