প্রতিটি অনন্য মানের জন্য ঘটনার সংখ্যা গণনা করুন


140

ধরা যাক আমার আছে:

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

উত্তর:


179

সম্ভবত টেবিল আপনি কি পরে আছেন?

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

7
আহ, হ্যাঁ, আমি এটি ব্যবহার করতে পারি কিছুটা সংশোধন করে: টি (as.data.frame (টেবিল (v)) [, 2]) ঠিক আমার যা প্রয়োজন, ধন্যবাদ
গেকেরা

1
আমি এটি দিয়ে বিশ্রীভাবে করতাম histtableতুলনায় বেশ কিছুটা ধীর মনে হচ্ছে hist। আমি ভাবছি কেন. কেউ কি নিশ্চিত করতে পারবেন?
শে

2
ধাওয়া, ফ্রিকোয়েন্সি দ্বারা অর্ডার করার কোন সুযোগ? আমার ঠিক একই সমস্যাটি রয়েছে তবে আমার টেবিলে প্রায় 20000 এন্ট্রি রয়েছে এবং আমি জানতে চাই যে সর্বাধিক সাধারণ এন্ট্রিগুলি কত ঘন ঘন।
টরভন 16

5
@ টরভন - অবশ্যই, order()ফলাফলগুলিতে ব্যবহার করুন। অর্থাতx <- as.data.frame(table(dummyData)); x[order(x$Freq, decreasing = TRUE), ]
চেজ

এই পদ্ধতিটি ভাল নয়, এটি কেবলমাত্র প্রচুর পরিমাণে পুনরাবৃত্তির সাথে খুব অল্প সংখ্যক ডেটার জন্য উপযুক্ত, এটি কয়েকটি অনুলিপি রেকর্ডস সহ প্রচুর ক্রমাগত ডেটা ফিট করে না।
গভীর উত্তর

26

আপনার যদি একাধিক উপাদান (= একটি বহুমাত্রিক ডেটা ফ্রেম) থাকে তবে dplyrআপনি প্রতিটি প্যাক্টরের উপাদানগুলির সমন্বয়ে অনন্য মান গণনা করতে প্যাকেজটি ব্যবহার করতে পারেন :

library("dplyr")
data %>% group_by(factor1, factor2) %>% summarize(count=n())

এটি %>%ডেটা ফ্রেমে চেইন পদ্ধতি কলগুলিতে পাইপ অপারেটরটি ব্যবহার করে data


21

এটি ব্যবহার করে এটি একটি লাইন পদ্ধতির aggregate

> aggregate(data.frame(count = v), list(value = v), length)

  value count
1     1    25
2     2    75

11

টেবিল () ফাংশনটি যাওয়ার একটি ভাল উপায়, চেসের পরামর্শ অনুসারে। আপনি যদি একটি বড় ডেটাসেট বিশ্লেষণ করে থাকেন তবে একটি বিকল্প উপায় হ'ল ডেটাটেবল প্যাকেজে .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]

8

একটি অ-মাত্রিক পূর্ণসংখ্যার ভেক্টর পেতে যাতে অনন্য মানগুলির গণনা থাকে, ব্যবহার করুন 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]এবং চেজের উত্তরের মন্তব্যে পোস্ট করা পোস্টের চেয়ে খাটো এবং আরও বুদ্ধিমান । রিকার্ডো সাপুর্তাকে ধন্যবাদ যারা এই বিষয়টি এখানে আমাকে দেখিয়েছে ।


7

এটি আমার পক্ষে কাজ করে। আপনার ভেক্টর নিনv

length(summary(as.factor(v),maxsum=50000))

মন্তব্য: ম্যাক্সসামটি অনন্য মানের সংখ্যা ক্যাপচার করতে যথেষ্ট বড় সেট করুন

বা magrittrপ্যাকেজ সহ

v %>% as.factor %>% summary(maxsum=50000) %>% length


4

আপনার মানগুলি সহ ডেটা ফ্রেমে অতিরিক্ত কলাম হিসাবে অনন্য মানের সংখ্যা থাকা দরকার (উদাহরণস্বরূপ নমুনার আকারকে উপস্থাপন করতে পারে এমন একটি কলাম), প্লাইয়ার একটি ঝরঝরে উপায় প্রদান করে:

data_frame <- data.frame(v = rep(c(1,2, 2, 2), 25))

library("plyr")
data_frame <- ddply(data_frame, .(v), transform, n = length(v))

3
বা ddply(data_frame, .(v), count)। এটি সুস্পষ্ট করে তোলাও মূল্যবান যে আপনাকে কাজ library("plyr")করার জন্য একটি কল প্রয়োজন ddply
ব্রায়ান ডিগস

ব্যবহার করতে অদ্ভুত মনে হচ্ছে transformপরিবর্তে mutateযখন ব্যবহার plyr
গ্রেগর থমাস

3

মানগুলিকে শ্রেণীবদ্ধ করে তোলা এবং কল করা summary()কাজ করবে।

> v = rep(as.factor(c(1,2, 2, 2)), 25)
> summary(v)
 1  2 
25 75 

2

আপনিও চেষ্টা করতে পারেন একটি tidyverse

library(tidyverse) 
dummyData %>% 
    as.tibble() %>% 
    count(value)
# A tibble: 2 x 2
  value     n
  <dbl> <int>
1     1    25
2     2    75

0

আপনি যদি কোনও ডেটা.ফ্রেমে (যেমন, ট্রেন.ডাটা) অনন্য চালনা করতে চান এবং গণনাগুলি (যা শ্রেণিবদ্ধে ওজন হিসাবে ব্যবহার করা যেতে পারে) পেতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:

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)                                                                                                                                                                                           
}  

0

দৈর্ঘ্য (অনন্য (df $ কল)) আমি দেখতে সবচেয়ে সহজ উপায়।


আমি সম্ভবত এই প্রশ্নটি জিজ্ঞাসা করার পরে, গত 10 বছরে সম্ভবত সম্ভবত অনেকগুলি বিকশিত হয়েছে।
গেকেরা

-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")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.