【发布时间】:2022-01-15 11:26:04
【问题描述】:
我有一个很大的 df(+100k 行,请参阅下面的数据快照),我正在尝试按组(物种)总结(最小值、平均值、中值、最大值等)表中的变量(盐度) ) 使用tapply,但如果我使用整个数据集(包含几个NA,但不是在每个组中)而不是随机子集,tapply 在它创建的表中添加一个名为“NA.s”的额外列,它有每个组的值。我不确定这个专栏是什么或它是如何创建的。使用 df 中随机选择的行的子集不会重新创建此问题,因此我不确定如何在此处重现我的数据...
然后我运行这段代码:
sum_stats <- tapply(df$salinity, df$species, summary)
这似乎创建了一个看起来像这样的双精度列表(没有 NULL):
单击其中一个会产生此效果,一切都很好:
> sum_stats[["Albula vulpes"]]
Min. 1st Qu. Median Mean 3rd Qu. Max.
15.49 15.49 15.49 15.49 15.49 15.49
然后创建数据框会以某种方式产生问题?
sum_data_table<-data.frame(do.call("rbind", sum_stats))
# Not sure what this is either
Warning message:
In rbind(`Achirus lineatus` = c(Min. = 6.11, `1st Qu.` = 20.97, :
number of columns of result is not a multiple of vector length (arg 1)
【问题讨论】:
-
如果添加忽略 NA 的参数会发生什么?
tapply(df$salinity, df$species, summary, na.rm=TRUE) -
NA.s 列仍然存在 :(
-
您能提供一些数据吗?你可以只做
dput(head(df))来提供几行。 -
在随机的行数子集上运行代码会导致该列不出现。我使用这个 mini_data
-
> dput(head(df)) structure(list(species = c(“Hippolyte pleuracanthus”、“Hippolyte pleuracanthus”、“Hippolyte pleuracanthus”、“Hippolyte pleuracanthus”、“Hippolyte pleuracanthus”、“ Hippolyte pleuracanthus"), 盐度 = c(37, 37, 37, 37, 37, 37)), row.names = c(NA, 6L), class= "data.frame")