我正在使用一个数据集,这个数据集基本上是不同城市(约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编码的,有没有办法解决这个问题?
答案 0 :(得分: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
答案 1 :(得分:0)
假设您的原始数据为df
(未经测试)
使用subset
作为@Roland:
df_sub<-subset(df, City %in% c(1,3,19))
使用ddply
中的plyr package
代替tapply
require(plyr)
X_Breakdown<-ddply(df_sub, .(City), summarize, meancity=mean(City))
注意:最好是给我们一个样本数据。