문제

숫자의 벡터가 있습니다.

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 값의 횟수를 어떻게 계산할 수 있습니까? 엑스 벡터에 나타나나요?

도움이 되었습니까?

해결책

당신은 그냥 사용할 수 있습니다 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

또는 데이터로 변환하십시오.

> 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가 발생하는 모든 위치에서 그리고 언제 suming, 논리 벡터는 숫자로 강요되어 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 ...

원하는 값이 표시되지 않거나 나중에 해당 값을 저장 해야하는 경우 adata.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)

빠르고 더러운 방법은 다음과 같습니다.

x <- 23
length(subset(numbers, numbers==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)

> 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

이후에 외관 수를 계산하려면 sapply 기능:

index<-sapply(1:length(numbers),function(x)sum(numbers[1:x]==numbers[x]))
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

다음 줄에서 원하는 숫자로 변경할 수 있습니다.

length(which(numbers == 4))

테이블을 사용하지만 비교하지 않습니다 names:

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)

편리하다고 생각하는 한 가지 방법은 다음과 같습니다.

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
(s<-summary (as.factor(numbers)))

이렇게하면 데이터 세트를 인수로 변환 한 다음 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 : 길이 (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

특정 요소를 계산하는 방법에는 여러 가지가 있습니다

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

이것은 할 수 있습니다 outer 평등의 메트릭스를 얻기 위해 rowSums, 명백한 의미로.
카운트를 갖기 위해 numbers 동일한 데이터 세트에서 데이터가 먼저 생성됩니다. 별도의 입력 및 출력을 원할 경우이 단계는 필요하지 않습니다.

df <- data.frame(No = numbers)
df$count <- rowSums(outer(df$No, df$No, FUN = `==`))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top