2014-05-09 39 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))。我只是试图找到避免有一个表变量躺在周围,如果我真的不需要它的方法。我希望有一种更简单的方法将表转换为命名向量。

相关问题