2014-05-09 73 views
2

我已經進行了調查,其中參加者(醫生)企圖使基於病變的照片診斷。這是一個多選的事情。然後,對於一個給定的問題,我有一個數據框中的響應,這個數據框已經被清除掉以便消除空白響應,未使用的級別等等,然後編製成數字。讓我們把它叫做mydata基於數據從表中選擇一個名字

STR(MYDATA)

num [1:236] 2 1 1 2 2 1 2 1 2 2 ... 

然後我就可以很容易地做這樣的表:

表(MYDATA)

mydata 
1 2 9 10 
20 200 14 2 

現在,我想要做的是選擇的受訪者最多的響應(在這種情況下,「2」),這樣我就可以比較這些誰選擇了共識,對那些誰得到它「錯誤」上的答案不同的問題(一個關於他們對自己的答案的自信程度)。我想我知道如何使用子集來做到這一點,一旦我知道哪種選擇是最常見的。

我可以找到使用max函數的最高響應(例如,在這種情況下,200):max(table(mydata))

我想不出如何做是讓「2」的最大數量有關。

有人能指出我在這個正確的方向。事實證明,R語法對我來說並不那麼直觀。

+2

描述如果'tab'是你的表'的名稱(標籤)標籤==最大(標籤)]' – user20650

+1

'哪個。最大'也很方便 –

+0

感謝大家的回答 - 提到的所有變化工作!這正是我無法弄清楚的。我也不是很瞭解stackflow,但是如果有一個需要設置的「解決」標誌,我很樂意去做。 –

回答

0

table很像一個列表或一個數據幀,在於其具有值和名稱,通過矢量子集可訪問的(屬性)。

> mydata <- c(rep(1, 20), rep(2, 200), rep(9, 14), rep(10, 2)) 
> tab <- table(mydata) 
> tab 
## mydata 
## 1 2 9 10 
## 20 200 14 2 
> names(tab) 
## [1] "1" "2" "9" "10" 
> c(val = names(tab)[tab == max(tab)], freq = max(tab)) 
## val freq 
## "2" "200" 

以下是等價

> tab[ names(tab)[tab == max(tab)] ] 
## 2 
## 200 
> tab["2"] 
## 2 
## 200 

其他有用的東西瞭解對象在其attributes

> attributes(tab) 
$dim 
[1] 4 

$dimnames 
$dimnames$mydata 
[1] "1" "2" "9" "10" 

$class 
[1] "table" 
0

我可能做到這一點

tab<-table(mydata) 
names(tab)[which.max(tab)] 

,將返回 「2」 作爲一個字符串。如果你想讓它回到一個數字,你可以做as.numeric()。這一行內容更加難看,可能效率較低,但是,嘿,這是一條線。

sapply(list(table(mydata)), function(x) names(x[which.max(x)])) 

也許

with(as.data.frame(table(data)), data[which.max(Freq)]) 

將實際與 「2」 的值返回一個因素。如果你想製作這個數字,你需要做as.numeric(as.character(x))。我只是試圖找到避免有一個表變量躺在周圍,如果我真的不需要它的方法。我希望有一種更簡單的方法將錶轉換爲命名向量。

相關問題