java 求向量的均值_使用向量中的x值计算元素的数量

回答(13)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

R中有一个标准函数

tabulate(numbers)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

使用表但不与 names 比较:

numbers

x

numbertable

numbertable[as.character(x)]

#67

# 2

当您多次使用不同元素的计数时, table 非常有用 . 如果您只需要一个计数,请使用 sum(numbers == x)

e15298c6a3b4591803e154ab0c3b3e2e.png

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

...

e15298c6a3b4591803e154ab0c3b3e2e.png

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这是一个快速而肮脏的方式:

x

length(subset(numbers, numbers==x))

e15298c6a3b4591803e154ab0c3b3e2e.png

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

e15298c6a3b4591803e154ab0c3b3e2e.png

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']])

e15298c6a3b4591803e154ab0c3b3e2e.png

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似乎是获得计数和存储它们的最快方法 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我可能会做这样的事情

length(which(numbers==x))

但实际上,更好的方法是

table(numbers)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

最直接的方式是 sum(numbers == x) .

numbers == x 创建一个逻辑向量,在x出现的每个位置都为TRUE,当 sum 时,逻辑向量被强制转换为numeric,将TRUE转换为1,将FALSE转换为0 .

但是,请注意,对于浮点数,最好使用以下内容: sum(abs(numbers - x) < 1e-6) .

e15298c6a3b4591803e154ab0c3b3e2e.png

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以在下一行中将数字更改为您想要的任何数字

length(which(numbers == 4))

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

count(numbers) 包中也有 count(numbers) . 在我看来比 table 方便得多 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值