我已经使用以下(示例)数据和交叉表()创建了一个交叉表数据集。当我使用这个方法时,所有没有数据的列x行组合在我的输出数据集中都变成了零。我希望它们是NAs,因为在数据集中有真正的零值,我无法区分它们otherwise.Additionally,我已经用xtabs()进行了实验,得到了同样的问题。对于获得NAs或其他方法的任何建议都是非常感谢的。
WW1_Data <- structure(list(Site_Name = c("Alnön", "Alnön", "Alnön", "Ammarnäs",
"Ammarnäs", "Anjan", "Anjan", "Bäcksand", "Bäcksand", "Fittjebodarna",
"Fittjebodarna", "Flatruet", "Flatruet", "Flatruet", "Flatruet",
"Glen", "Glen", "Glen", "Idre", "Idre"), Year = c("1996", "2000",
"2010", "1996", "2011", "2009", "2010", "2000", "2010", "2008",
"2009", "2008", "2009", "2010", "2011", "2008", "2009", "2010",
"1996", "2010"), WW1_Pct_2 = c(0.307692307692308, 0.260869565217391,
0.0833333333333333, 0.75, 0.8, 0.52, 0.5, 0.0833333333333333,
0.375, 0.4, 0.423076923076923, 0.85, 0.483870967741935, 0.56,
0.58, 0.777777777777778, 0.555555555555556, 0.521739130434783,
0.4, 0)), .Names = c("Site_Name", "Year", "WW1_Pct_2"), row.names = c(3L,
4L, 5L, 8L, 9L, 10L, 11L, 15L, 16L, 28L, 29L, 30L, 31L, 32L,
33L, 42L, 43L, 44L, 59L, 60L), class = "data.frame")
xtabs(WW1_Pct_2 ~ Site_Name + Year, WW1_Data)
## alternatively ##
library(ecodist)
WW1_XTAB <- data.frame(with(WW1_Data, crosstab(Site_Name, Year, WW1_Pct_2)))发布于 2012-08-05 02:53:07
由于在使用xtabs聚合时使用的函数是sum,因此可以通过使用tapply将其与其默认设置na.rm=FALSE一起使用:
> with(WW1_Data, tapply(WW1_Pct_2, list(Site_Name, Year), sum ) )
1996 2000 2008 2009 2010 2011
Alnön 0.3076923077 0.26086956522 NA NA 0.08333333333 NA
Ammarnäs 0.7500000000 NA NA NA NA 0.80
Anjan NA NA NA 0.5200000000 0.50000000000 NA
Bäcksand NA 0.08333333333 NA NA 0.37500000000 NA
Fittjebodarna NA NA 0.4000000000 0.4230769231 NA NA
Flatruet NA NA 0.8500000000 0.4838709677 0.56000000000 0.58
Glen NA NA 0.7777777778 0.5555555556 0.52173913043 NA
Idre 0.4000000000 NA NA NA 0.00000000000 NA对于表(这是一种特殊的矩阵),有一个as.data.frame方法,它是tapply返回的对象类。您对as.data.frame的使用是多余的,因为reshape的结果已经是一个数据帧。
发布于 2012-08-04 20:32:53
这就起到了作用。欢迎使用其他解决方案!
WW1_XTAB <- as.data.frame(reshape(WW1_Data,idvar="Site_Name",timevar="Year",direction="wide"))发布于 2012-08-05 07:24:26
另一种方法是
library(reshape2)
dcast(WW1_Data, Site_Name~Year)尽管这依赖于每个站点/年份组合只有一个条目。如果有更多的东西你可以使用
library(reshape2)
dcast(WW1_Data, Site_Name~Year, sum)但这将给出0而不是NA,其中有缺失值(基于零元素列表的和是0。
https://stackoverflow.com/questions/11808112
复制相似问题