我有一个数字向量:
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
453,435,324,34,456,56,567,65,34,435)
我如何让R计算x值在向量中出现的次数?
我有一个数字向量:
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
453,435,324,34,456,56,567,65,34,435)
我如何让R计算x值在向量中出现的次数?
当前回答
这可以用outer来完成,以获得一个等式矩阵,后面跟着rowsum,具有明显的含义。 为了将计数和数字放在同一个数据集中,首先创建data.frame。如果需要分离输入和输出,则不需要此步骤。
df <- data.frame(No = numbers)
df$count <- rowSums(outer(df$No, df$No, FUN = `==`))
其他回答
使用表,但不与名称比较:
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435)
x <- 67
numbertable <- table(numbers)
numbertable[as.character(x)]
#67
# 2
当您多次使用不同元素的计数时,Table非常有用。如果你只需要一个计数,使用sum(numbers == x)
我可能会这样做
length(which(numbers==x))
但实际上,更好的方法是
table(numbers)
一个选项是使用vctrs库中的vec_count()函数:
vec_count(numbers)
key count
1 435 3
2 67 2
3 4 2
4 34 2
5 56 2
6 23 2
7 456 1
8 43 1
9 453 1
10 5 1
11 657 1
12 324 1
13 54 1
14 567 1
15 65 1
默认顺序将最常用的值放在顶部。如果根据键进行排序(类似table()的输出):
vec_count(numbers, sort = "key")
key count
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
这里有一个快速而肮脏的方法:
x <- 23
length(subset(numbers, numbers==x))
你可以使用table():
> a <- table(numbers)
> 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
...