9

特定の列の行数を取得しようとしています。Name、Age、および Major の 3 つの列があります。このリストから、たとえば BIO メジャーがいくつあるかを調べるにはどうすればよいですか。

私は DF <- (NAME, YEAR, MAJOR, GPA) を持っています。20 人未満の専攻を排除できる機能が必要です。

だから私はこのようなものが欲しいのですが、実際のrコードで。

DF <- function(x){
##  Y <- get number of people for each major
##  GPA [DF$Y < 20] <- NA

どんな助けでもいただければ幸いです

4

3 に答える 3

3

持っているものの数をカウントする基本的な方法は、元の要素がカウントしたいものである場合は論理ベクトルの各要素が 1 であり、そうでない場合は 0 である論理ベクトルを合計することです。

いくつかのデータから始めましょう:

N = 1000
set.seed(2)
DF <- data.frame(NAME=as.character(1:N), 
                 YEAR=sample(c("Freshman","Sophomore","Junior","Senior"),
                             size=N, replace=T), 
                 MAJOR=sample(c("BIO","ECON","HIST","LIT","MATH"),size=N, 
                              replace=T, prob=c(.20, .15, .30, .30, .05)), 
                 GPA=runif(N, min=0, max=4))

したがって、次の方法でBIO専攻の数を確認します。

sum(DF$MAJOR=="BIO")
[1] 181

存在するメジャーごとにいくつあるか知りたい場合は、?uniqueでメジャーのリストを取得し、 ?lapplyでリストに上記の関数を適用できます。

lapply(unique(DF$MAJOR), function(x){ sum(DF$MAJOR==x) })

これは少しきれいなバージョンです:

cbind(levels(unique(DF$MAJOR)), 
      lapply(unique(DF$MAJOR), function(x){ sum(DF$MAJOR==x) }))
     [,1]   [,2]
[1,] "BIO"  297 
[2,] "ECON" 303 
[3,] "HIST" 181 
[4,] "LIT"  155 
[5,] "MATH" 64  

ここから取れるはずです。


更新: @DWin は正しいです。私はこれを複雑にしすぎていました。要因であるためDF$MAJOR、次のように簡単に実行できます。

> summary(DF$MAJOR)
 BIO ECON HIST  LIT MATH 
 181  155  297  303   64 
于 2013-06-18T20:21:30.363 に答える