假设我有一些计数数据,如下所示:

library(tidyr)
library(dplyr)

X.raw <- data.frame(
  x = as.factor(c("A", "A", "A", "B", "B", "B")),
  y = as.factor(c("i", "ii", "ii", "i", "i", "i")),
  z = 1:6
)
X.raw
#   x  y z
# 1 A  i 1
# 2 A ii 2
# 3 A ii 3
# 4 B  i 4
# 5 B  i 5
# 6 B  i 6

我想整理并总结如下:

X.tidy <- X.raw %>% group_by(x, y) %>% summarise(count = sum(z))
X.tidy
# Source: local data frame [3 x 3]
# Groups: x
#
#   x  y count
# 1 A  i     1
# 2 A ii     5
# 3 B  i    15

我知道,对于x=="B"y=="ii",我们观察到的是零计数,而不是缺失值.i、 e.现场工作人员确实在现场,但由于没有正计数,因此未在原始数据中输入任何行.我可以通过这样做明确地添加零计数:

X.fill <- X.tidy %>% spread(y, count, fill = 0) %>% gather(y, count, -x)
X.fill
# Source: local data frame [4 x 3]
# 
#   x  y count
# 1 A  i     1
# 2 B  i    15
# 3 A ii     5
# 4 B ii     0

但这似乎有点迂回.有没有更简洁的成语来形容这一点?

只是想澄清一下:我的代码已经完成了我需要它做的事情,使用spread然后gather,所以我感兴趣的是找到一条更直接的路由within tidyrdplyr.

推荐答案

由于100,您可以通过在group_by中设置参数.drop = FALSE来实现:

X.tidy <- X.raw %>% group_by(x, y, .drop = FALSE) %>% summarise(count=sum(z))
X.tidy
# # A tibble: 4 x 3
# # Groups:   x [2]
#   x     y     count
#   <fct> <fct> <int>
# 1 A     i         1
# 2 A     ii        5
# 3 B     i        15
# 4 B     ii        0

R相关问答推荐

使用rlang s arg_match判断函数输入列表

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

如果索引重复,聚合xts核心数据

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

IMF IFS数据以R表示

如果可能,将数字列转换为整数,否则保留为数字

如何指定我的函数应该查找哪个引用表?

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

Geom_Hline将不会出现,而它以前出现了

条形图顶部与其错误条形图不对齐

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

将统计检验添加到GGPUBR中的盒图,在R

如果条件匹配,则使用Mariate粘贴列名

无法将条件case_when()应用于使用!!创建的新变量Mutations

对R中的列表列执行ROW Mean操作

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

R:如何在数据集中使用Apply

以R表示的NaN值的IS.NA状态