0

私の質問はこれに由来し、この質問は以前に尋ねられたものであり、私が思うにそれらとは十分に異なっています。最小限のデータセット(鳥)があり、すべての行が次のように特定の時間と場所での鳥の観察を表していると想像してください。

id,obs,country
A,4,USA
B,3,CAN
A,5,USA
C,4,MEX
C,1,USA
A,3,CAN
D,1,null

私が理想的に望んでいるのは、このデータセットを次のような形式に変換して、データセットからnullを削除することです。

id,tot_obs,country_tot
A,12,2
B,3,1
C,5,2

私は以下を使用して要因の数を取得できることを知っています:

table(bird$country)

しかし、ヌルを削除し、合計カウントを合計し、国のカウントを見つけて、それらをこの形式に再構成する、よりスマートな、おそらく1行の方法はありますか?これを行うパッケージがあれば、私もその提案を受け入れます。ありがとう !

4

1 に答える 1

2

次のデータをロードしますstringsAsFactors=FALSE

df <- read.csv(header=TRUE, text="id,obs,country
A,4,USA
B,3,CAN
A,5,USA
C,4,MEX
C,1,USA
A,3,CAN
D,1,null", stringsAsFactors=FALSE)

# check to see if columns are factors
sapply(df, class)
#          id         obs     country 
# "character"   "integer" "character" 

ですべての行を削除しますcountry = null

df <- df[df$country != "null", ]

次に、plyrパッケージwithsummariseを使用して、次のように目的の結果を取得できます。

ddply(df, .(id), summarise, tot_obs=sum(obs), tot_country=length(unique(country)))
#   id tot_obs tot_country
# 1  A      12           2
# 2  B       3           1
# 3  C       5           2
于 2013-03-20T22:16:00.690 に答える