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

我理想中想要的是将此数据集转换为这样的形式,从数据集中删除空值:

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

我知道我可以使用以下方法计算因素:

table(bird$country)

但是,是否有一种更聪明的方法,也许是一种去除空值、加总计数、找到国家的计数然后将它们重新配置为这种形式的方法?如果有一个包可以做到这一点,那么我也愿意接受这个建议。谢谢 !

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", ]

然后您可以使用plyrpackage 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 回答