숫자로 구성된 벡터가 있습니다.
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 가 벡터에 나타나는 횟수를 어떻게 계산할 수 있습니까?
답변
당신은 사용할 수 있습니다 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
...
답변
가장 직접적인 방법은 sum(numbers == x)
입니다.
numbers == x
x가 발생하는 모든 위치에서 TRUE 인 논리 형 벡터를 생성하고, sum
ing 일 때 논리 형 벡터를 숫자로 강제 변환하여 TRUE를 1로, FALSE를 0으로 변환합니다.
그러나 부동 소수점 숫자의 경우 다음과 같은 것을 사용하는 것이 좋습니다 sum(abs(numbers - x) < 1e-6)
.
답변
아마 이런 식으로 할 것
length(which(numbers==x))
하지만 더 좋은 방법은
table(numbers)
답변
패키지 도 count(numbers)
있습니다 plyr
. table
제 생각 보다 훨씬 편리합니다 .
답변
내가 선호하는 솔루션은을 사용 rle
하여 값 ( x
예 : 레이블 )과 길이 를 반환합니다. 이 길이는 해당 값이 순서대로 나타난 횟수를 나타냅니다.
rle
와 결합 sort
하면 값이 나타나는 횟수를 세는 매우 빠른 방법이 있습니다. 보다 복잡한 문제에 도움이 될 수 있습니다.
예:
> numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
> a <- rle(sort(numbers))
> 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 <- data.frame(number=a$values, n=a$lengths)
> 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은 모든 값을 세고 저장하는 가장 빠른 방법 인 것 같습니다.
답변
R에는 표준 기능이 있습니다.
tabulate(numbers)
답변
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435 453,435,324,34,456,56,567,65,34,435)
> 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