回答(13)
2 years ago
R中有一个标准函数
tabulate(numbers)
2 years ago
使用表但不与 names 比较:
numbers
x
numbertable
numbertable[as.character(x)]
#67
# 2
当您多次使用不同元素的计数时, table 非常有用 . 如果您只需要一个计数,请使用 sum(numbers == x)
2 years ago
你可以使用 table() :
> a
> a
numbers
4 5 23 34 43 54 56 65 67 324 435 453 456 567 657
2 1 2 2 1 1 2 1 2 1 3 1 1 1 1
然后你可以将它子集化:
> a[names(a)==435]
435
3
或者如果您更熟悉它,请将其转换为data.frame:
> as.data.frame(table(numbers))
numbers Freq
1 4 2
2 5 1
3 23 2
4 34 2
...
2 years ago
我觉得方便的另一种方法是:
numbers
(s
这会将数据集转换为factor,然后summary()为我们提供控件总数(唯一值的计数) .
输出是:
4 5 23 34 43 54 56 65 67 324 435 453 456 567 657
2 1 2 2 1 1 2 1 2 1 3 1 1 1 1
如果愿意,可以将其存储为数据帧 .
as.data.frame(cbind(Number = names(s),Freq = s),stringsAsFactors = F,row.names = 1:length(s))
这里row.names已用于重命名行名 . 不使用row.names,s中的列名称用作新数据帧中的行名称
输出是:
Number Freq
1 4 2
2 5 1
3 23 2
4 34 2
5 43 1
6 54 1
7 56 2
8 65 1
9 67 2
10 324 1
11 435 3
12 453 1
13 456 1
14 567 1
15 657 1
2 years ago
这是一个快速而肮脏的方式:
x
length(subset(numbers, numbers==x))
2 years ago
numbers
> length(grep(435, numbers))
[1] 3
> length(which(435 == numbers))
[1] 3
> require(plyr)
> df = count(numbers)
> df[df$x == 435, ]
x freq
11 435 3
> sum(435 == numbers)
[1] 3
> sum(grepl(435, numbers))
[1] 3
> sum(435 == numbers)
[1] 3
> tabulate(numbers)[435]
[1] 3
> table(numbers)['435']
435
3
> length(subset(numbers, numbers=='435'))
[1] 3
2 years ago
计算特定元素的方法有很多种
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']])
2 years ago
我的首选解决方案使用 rle ,它将返回一个值(标签,在您的示例中为 x )和一个长度,表示该值在序列中出现的次数 .
通过将 rle 与 sort 组合,您可以非常快速地计算任何值出现的次数 . 这可能对更复杂的问题有所帮助 .
例:
> numbers
> a
> a
Run Length Encoding
lengths: int [1:15] 2 1 2 2 1 1 2 1 2 1 ...
values : num [1:15] 4 5 23 34 43 54 56 65 67 324 ...
如果您想要的值未显示,或者您需要存储该值以供日后使用,请将 a 设为 data.frame .
> b
> b
values n
1 4 2
2 5 1
3 23 2
4 34 2
5 43 1
6 54 1
7 56 2
8 65 1
9 67 2
10 324 1
11 435 3
12 453 1
13 456 1
14 567 1
15 657 1
我发现我很少想知道一个值的频率而不是所有的值,并且rle似乎是获得计数和存储它们的最快方法 .
2 years ago
我可能会做这样的事情
length(which(numbers==x))
但实际上,更好的方法是
table(numbers)
2 years ago
最直接的方式是 sum(numbers == x) .
numbers == x 创建一个逻辑向量,在x出现的每个位置都为TRUE,当 sum 时,逻辑向量被强制转换为numeric,将TRUE转换为1,将FALSE转换为0 .
但是,请注意,对于浮点数,最好使用以下内容: sum(abs(numbers - x) < 1e-6) .
2 years ago
如果要随后计算出现次数,可以使用 sapply 函数:
index
cbind(numbers, index)
输出:
numbers index
[1,] 4 1
[2,] 23 1
[3,] 4 2
[4,] 23 2
[5,] 5 1
[6,] 43 1
[7,] 54 1
[8,] 56 1
[9,] 657 1
[10,] 67 1
[11,] 67 2
[12,] 435 1
[13,] 453 1
[14,] 435 2
[15,] 324 1
[16,] 34 1
[17,] 456 1
[18,] 56 2
[19,] 567 1
[20,] 65 1
[21,] 34 2
[22,] 435 3
2 years ago
您可以在下一行中将数字更改为您想要的任何数字
length(which(numbers == 4))
2 years ago
count(numbers) 包中也有 count(numbers) . 在我看来比 table 方便得多 .