각 고유 값에 대한 발생 횟수
예를 들어, 다음과 같습니다.
v = rep(c(1,2, 2, 2), 25)
이제 각 고유 값이 나타나는 횟수를 세어 보겠습니다. unique(v)
고유한 값은 반환하지만 값의 수는 반환하지 않습니다.
> unique(v)
[1] 1 2
나는 나에게 주는 것을 원합니다.
length(v[v==1])
[1] 25
length(v[v==2])
[1] 75
하지만 더 일반적인 원라이너로서 :) 이와 같은 가까운 (그러나 완전히는 아닙니다) 것:
#<doesn't work right> length(v[v==unique(v)])
아마도 테이블이 당신이 찾고 있는 것입니까?
dummyData = rep(c(1,2, 2, 2), 25)
table(dummyData)
# dummyData
# 1 2
# 25 75
## or another presentation of the same data
as.data.frame(table(dummyData))
# dummyData Freq
# 1 1 25
# 2 2 75
요인이 여러 개인 경우(= 다차원 데이터 프레임),dplyr
각 요인 조합에서 고유 값을 카운트하는 패키지:
library("dplyr")
data %>% group_by(factor1, factor2) %>% summarize(count=n())
파이프 오퍼레이터를 사용합니다.%>%
데이터 프레임에 메서드 호출을 연결합니다.data
.
다음을 사용하여 한 줄로 접근할 수 있습니다.aggregate
.
> aggregate(data.frame(count = v), list(value = v), length)
value count
1 1 25
2 2 75
length(unique(df$col))
그게 제가 볼 수 있는 가장 간단한 방법입니다.
Chase가 제안한 것처럼 table() 함수는 좋은 방법입니다.큰 데이터 집합을 분석하는 경우 다른 방법으로 데이터 테이블 패키지에서 .N 함수를 사용할 수 있습니다.
데이터 테이블 패키지를 설치했는지 확인하십시오.
install.packages("data.table")
코드:
# Import the data.table package
library(data.table)
# Generate a data table object, which draws a number 10^7 times
# from 1 to 10 with replacement
DT<-data.table(x=sample(1:10,1E7,TRUE))
# Count Frequency of each factor level
DT[,.N,by=x]
고유 값의 개수를 포함하는 비차원 정수 벡터를 가져오려면 다음을 사용합니다.c()
.
dummyData = rep(c(1, 2, 2, 2), 25) # Chase's reproducible data
c(table(dummyData)) # get un-dimensioned integer vector
1 2
25 75
str(c(table(dummyData)) ) # confirm structure
Named int [1:2] 25 75
- attr(*, "names")= chr [1:2] "1" "2"
이것은 고유한 값의 카운트를 다른 함수에 입력해야 할 경우 유용할 수 있으며, 다음 함수보다 짧고 관용적입니다.t(as.data.frame(table(dummyData))[,2]
체이스의 답변에 대한 댓글에 게시되었습니다.여기서 저에게 이것을 지적해 주신 리카르도 사포르타 덕분입니다.
이것은 나에게 효과가 있습니다.벡터를 사용합니다.v
length(summary(as.factor(v),maxsum=50000))
설명: maxsum을 고유 값의 수를 캡처할 수 있을 정도로 크게 설정합니다.
또는 그와 함께.magrittr
꾸러미
v %>% as.factor %>% summary(maxsum=50000) %>% length
또한 값을 범주화하고 호출합니다.summary()
효과가 있을 것입니다.
> v = rep(as.factor(c(1,2, 2, 2)), 25)
> summary(v)
1 2
25 75
당신은 또한 시도할 수 있습니다.tidyverse
library(tidyverse)
dummyData %>%
as.tibble() %>%
count(value)
# A tibble: 2 x 2
value n
<dbl> <int>
1 1 25
2 2 75
데이터 프레임에 값이 들어 있는 추가 열(예: 표본 크기를 나타내는 열)로 고유한 값의 수를 지정해야 하는 경우, plyr은 다음과 같은 방법을 제공합니다.
data_frame <- data.frame(v = rep(c(1,2, 2, 2), 25))
library("plyr")
data_frame <- ddply(data_frame, .(v), transform, n = length(v))
시도해 볼 수도 있습니다.dplyr::count
df <- tibble(x=c('a','b','b','c','c','d'), y=1:6)
dplyr::count(df, x, sort = TRUE)
# A tibble: 4 x 2
x n
<chr> <int>
1 b 2
2 c 2
3 a 1
4 d 1
data.frame(예: train.data)에서 고유하게 실행하고 카운트(분류기의 가중치로 사용할 수 있음)도 가져오려면 다음을 수행할 수 있습니다.
unique.count = function(train.data, all.numeric=FALSE) {
# first convert each row in the data.frame to a string
train.data.str = apply(train.data, 1, function(x) paste(x, collapse=','))
# use table to index and count the strings
train.data.str.t = table(train.data.str)
# get the unique data string from the row.names
train.data.str.uniq = row.names(train.data.str.t)
weight = as.numeric(train.data.str.t)
# convert the unique data string to data.frame
if (all.numeric) {
train.data.uniq = as.data.frame(t(apply(cbind(train.data.str.uniq), 1,
function(x) as.numeric(unlist(strsplit(x, split=","))))))
} else {
train.data.uniq = as.data.frame(t(apply(cbind(train.data.str.uniq), 1,
function(x) unlist(strsplit(x, split=",")))))
}
names(train.data.uniq) = names(train.data)
list(data=train.data.uniq, weight=weight)
}
다른 많은 답이 있다는 것을 알지만, 여기에 다음을 사용하는 다른 방법이 있습니다.sort
그리고.rle
기능들.함수rle
실행 길이 인코딩의 약자입니다.숫자 런 카운트에 사용할 수 있습니다(의 Rman 문서 참조).rle
), 그러나 여기에도 적용할 수 있습니다.
test.data = rep(c(1, 2, 2, 2), 25)
rle(sort(test.data))
## Run Length Encoding
## lengths: int [1:2] 25 75
## values : num [1:2] 1 2
결과를 캡처하면 다음과 같이 길이와 값에 액세스할 수 있습니다.
## rle returns a list with two items.
result.counts <- rle(sort(test.data))
result.counts$lengths
## [1] 25 75
result.counts$values
## [1] 1 2
count_unique_words <-function(wlist) {
ucountlist = list()
unamelist = c()
for (i in wlist)
{
if (is.element(i, unamelist))
ucountlist[[i]] <- ucountlist[[i]] +1
else
{
listlen <- length(ucountlist)
ucountlist[[i]] <- 1
unamelist <- c(unamelist, i)
}
}
ucountlist
}
expt_counts <- count_unique_words(population)
for(i in names(expt_counts))
cat(i, expt_counts[[i]], "\n")
언급URL : https://stackoverflow.com/questions/4215154/count-number-of-occurences-for-each-unique-value
'programing' 카테고리의 다른 글
MySQL: 두 필드를 결합하여 쿼리의 날짜/시간 필드 출력 (0) | 2023.06.06 |
---|---|
표에서 헤더 이름 및 행 번호로 Excel 셀 참조 (0) | 2023.06.06 |
npm으로 클린 설치(node_modules 삭제 및 설치)를 수행하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
SQL, Postgres OIDs, 그것들은 무엇이고 왜 유용합니까? (0) | 2023.06.01 |
로컬 변경 사항이 있더라도 git push에 "모든 것이 최신"으로 표시됩니다. (0) | 2023.06.01 |