2012-11-28 131 views
-1

我有這種格式的ID和它出現的次數的數據。我想寫一個函數返回兩次以上的ID apprearing。查找重複項

ID Freq 
    100 1 
    101 1 
    102 1 
    103 1 
    104 1 
    105 2 
    106 1 
    107 1 
    108 1 

這裏是我的代碼

if (data$Freq>=2){ 
    return(data$ID) 
} else { 
    print("no duplicates of years") 
} 

正在以下雁和警告

[1] "no duplicates of years" 
Warning message: 
In if (x$Freq > 1) { : 
    the condition has length > 1 and only the first element will be used 

什麼可能我是做錯了什麼?

編輯:

感謝所有的u的響應。我想我有方式有問題,我創建了頻率表

x=as.data.frame(table(data$cid)) 

其中cidID。當我嘗試看看在第一列的元素即

> x$var1[1:20,] 

我得到NULL,而這

>x$Freq[1:20,] 

將返回

Error in x$Freq[1:20, ] : incorrect number of dimensions' 

x[1:20,]返回顯示x元素數據框。

+0

你應該使用'ifelse',而不是'if' – Andrie

+1

ID出現*超過*或*至少*兩次? – BenBarnes

+1

你的變量叫做'x'還是叫'data'?你給出的錯誤信息與你的代碼不一致(它也表示''1'而不是'> = 2') –

回答

1

由於@Andrie建議,ifelse可能是有用的:

根據您的其他信息,這裏有一個重複的例子:

set.seed(1) 

data <- as.data.frame(table(data.frame(cid = sample(100:120, 30, replace=TRUE)))) 

> ifelse(data$Freq-1, as.character(data$Var1), "no duplicates of years") 
# [1] "no duplicates of years" "no duplicates of years" "no duplicates of years" 
# [4] "no duplicates of years" "104"     "105"     
# [7] "107"     "108"     "no duplicates of years" 
# [10] "no duplicates of years" "113"     "no duplicates of years" 
# [13] "no duplicates of years" "116"     "118"     
# [16] "119"     "no duplicates of years" 

而只是顯示ID與同頻率> 1:

data$Var1[as.logical(data$Freq - 1)] 
# [1] 104 105 107 108 113 116 118 119 
# 17 Levels: 100 101 102 103 104 105 107 108 110 112 113 114 115 116 118 ... 120 
+0

感謝所有你的迴應。我想我有一個問題,我創建頻率表的方式 – jonestats

+0

感謝你所有的答覆。我想我有一個問題,我創建頻率表的方式'x = as.data.frame(table(data $ cid)),其中cid是ID。當我嘗試查看第一列中的元素,即'> x $ var1 [1:20,]我得到NULL,而這> x $ Freq [1:20,]會返回錯誤x $ Freq [1:20 ,]:維數不正確,但x [1:20,]返回顯示x中元素的數據框。' – jonestats

+0

@jonestats,請看我更新的答案。另外,請閱讀子集('?Extract')。 'x $ Freq'是一維向量,方括號中的逗號表示您正嘗試對二維對象進行子集化。 – BenBarnes

3

有一個命令duplicated(),可以在不參考$ Freq列的情況下執行此操作:

data$ID[duplicated(data$ID)] 

自己的代碼,不工作的錯誤提示,因爲if()需要有一個單一的TRUE/FALSE條件,它只是看看數據$頻率的第一個元素是一個1然後停止。

如果你想要做這樣的事情,然後which()或者是你想要什麼:

df= data.frame(freq=rep(1:2,5), id=1:10) 

df 

    freq id 
1  1 1 
2  2 2 
3  1 3 
4  2 4 
5  1 5 
6  2 6 
7  1 7 
8  2 8 
9  1 9 
10 2 10 

df$id[which(df$freq>1)] 
[1] 2 4 6 8 10 

甚至

df$id[df$freq>1] 
[1] 2 4 6 8 10 
+0

它看起來並不像OP想要「重複」看數據,也沒有跡象表明ID「105」在該向量中出現多次 –

+0

他說'我想寫一個返回ID出現的函數超過兩倍。「我認爲他的例子不完整,認爲我會提到直接方法。 –