0

我正在使用一个数据集,它基本上是不同城市(大约 150 个城市)的日常使用数据(我们只是说变量 X 和 Y)。我只为特定城市创建了一个数据子集,在 150 个城市中只选择了 3 个。
然后当我tapply按城市做时,我得到了 3 个城市的平均值,但也得到了数据集中所有其他 147 个城市的 NA。我正在使用以下编码

df<-read.csv(...)
df_sub<-subset(df,df$City==1|df$City==3|df$City==19)
X_Breakdown<-tapply(X,df_sub$City, mean, na.rm=TRUE)
Print(X_Breakdown)

这给了我:

                    City 1                         City 2 
                        15                             NA 
                    City 3                         City 4 
                        12                             NA 
                    City 5                         City 6 
                        NA                             NA 

希望你能明白。我想获得一个仅包含我感兴趣的 3 个城市的数据集。

似乎这组变量是用 R 编码的,有没有办法解决这个问题?

4

2 回答 2

2

City很可能是一个因素:

fac <- factor(1:2,levels=1:3)
tapply(1:2,fac,mean)
# 1  2  3 
# 1  2 NA 

使用droplevels

tapply(1:2,droplevels(fac),mean)
#1 2 
#1 2
于 2013-06-25T16:40:49.853 回答
0

假设您的原始数据是df(未经测试)

用作@Roland subset

df_sub<-subset(df, City %in% c(1,3,19))

使用ddplyfromplyr package而不是tapply

require(plyr)
X_Breakdown<-ddply(df_sub, .(City), summarize, meancity=mean(City))

注意:最好给我们一个样本数据。

于 2013-06-25T16:53:39.277 回答