library(plyr)
numbers =c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,7,65,34,435)
print(length(which(numbers==435)))
#Sum counts number of TRUE's in a vector
print(sum(numbers==435))
print(sum(c(TRUE, FALSE, TRUE)))
#count is present in plyr library
#o/p of count is a DataFrame, freq is 1 of the columns of data frame
print(count(numbers[numbers==435]))
print(count(numbers[numbers==435])[['freq']])
8
我的首选解决方案使用 rle ,它将返回一个值(标签,在您的示例中为 x )和一个长度,表示该值在序列中出现的次数 .
13 回答
R中有一个标准函数
tabulate(numbers)
使用表但不与
names
比较:当您多次使用不同元素的计数时,
table
非常有用 . 如果您只需要一个计数,请使用sum(numbers == x)
你可以使用
table()
:然后你可以将它子集化:
或者如果您更熟悉它,请将其转换为data.frame:
我觉得方便的另一种方法是:
这会将数据集转换为factor,然后summary()为我们提供控件总数(唯一值的计数) .
输出是:
如果愿意,可以将其存储为数据帧 .
这里row.names已用于重命名行名 . 不使用row.names,s中的列名称用作新数据帧中的行名称
输出是:
这是一个快速而肮脏的方式:
计算特定元素的方法有很多种
我的首选解决方案使用
rle
,它将返回一个值(标签,在您的示例中为x
)和一个长度,表示该值在序列中出现的次数 .通过将
rle
与sort
组合,您可以非常快速地计算任何值出现的次数 . 这可能对更复杂的问题有所帮助 .例:
如果您想要的值未显示,或者您需要存储该值以供日后使用,请将
a
设为data.frame
.我发现我很少想知道一个值的频率而不是所有的值,并且rle似乎是获得计数和存储它们的最快方法 .
我可能会做这样的事情
但实际上,更好的方法是
最直接的方式是
sum(numbers == x)
.numbers == x
创建一个逻辑向量,在x出现的每个位置都为TRUE,当sum
时,逻辑向量被强制转换为numeric,将TRUE转换为1,将FALSE转换为0 .但是,请注意,对于浮点数,最好使用以下内容:
sum(abs(numbers - x) < 1e-6)
.如果要随后计算出现次数,可以使用
sapply
函数:输出:
您可以在下一行中将数字更改为您想要的任何数字
count(numbers)
包中也有count(numbers)
. 在我看来比table
方便得多 .