当前位置: 首页 > 知识库问答 >
问题:

用DPLYR向分组数据添加行?

养焱
2023-03-14
data <- 
structure(list(Article = structure(c(1L, 1L, 3L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L
), .Label = c("10004", "10006", "10007"), class = "factor"), 
Demand = c(26L, 780L, 2L, 181L, 228L, 214L, 219L, 291L, 104L, 
72L, 155L, 237L, 182L, 148L, 52L, 227L, 2L, 355L, 2L, 432L, 
1L, 156L), Week = c("2013-W01", "2013-W01", "2013-W01", "2013-W01", 
"2013-W01", "2013-W02", "2013-W02", "2013-W02", "2013-W02", 
"2013-W02", "2013-W03", "2013-W03", "2013-W03", "2013-W03", 
"2013-W03", "2013-W04", "2013-W04", "2013-W04", "2013-W04", 
"2013-W04", "2013-W04", "2013-W04")), .Names = c("Article", 
"Demand", "Week"), class = "data.frame", row.names = c(NA, -22L))
library(dplyr)
WeekSums <- 
  data %>%
   group_by(Article, Week) %>%
   summarize(
    WeekDemand = sum(Demand)
   )
  Article     Week WeekDemand
1   10004 2013-W01       1215
2   10004 2013-W02        900
3   10004 2013-W03        774
4   10004 2013-W04       1170
5   10006 2013-W01        0
6   10006 2013-W02        0
7   10006 2013-W03        0
8   10006 2013-W04         5
9   10007 2013-W01         2
10   10007 2013-W02        0
11   10007 2013-W03        0
12   10007 2013-W04        0

我试过了

WeekSums %>%
  group_by(Article) %>%
  if(n()< 4) rep(rbind(c(Article,NA,NA)), 4 - n() )

但这行不通。在我最初的方法中,我通过将每周编号1-4的dataframe与我的rawdata文件合并来解决这个问题。这样,我每篇文章有4周的时间(行),但是使用for循环的实现效率非常低,所以我试图用dplyr(或任何其他更高效的包/函数)做同样的事情。任何建议都将不胜感激!

共有1个答案

邢博涛
2023-03-14

如果没有dplyr,可以这样做:

as.data.frame(xtabs(Demand ~ Week + Article, data))

给予:

       Week Article Freq
1  2013-W01   10004 1215
2  2013-W02   10004  900
3  2013-W03   10004  774
4  2013-W04   10004 1170
5  2013-W01   10006    0
6  2013-W02   10006    0
7  2013-W03   10006    0
8  2013-W04   10006    5
9  2013-W01   10007    2
10 2013-W02   10007    0
11 2013-W03   10007    0
12 2013-W04   10007    0

可以将其改写为magrittr或dplyr管道,如下所示:

data %>% xtabs(formula = Demand ~ Week + Article) %>% as.data.frame()
 类似资料:
  • 目前,我学习如何使用SpringBoot和访问多个数据库。在学习过程中,我遇到了向mysql表添加数据的问题。在我使用插入。。。。Value()要添加数据,当我使用get方法(SpringBoot)在网站上查找(显示)数据时,表仍然显示为null(无数据)。你们能就我的错误给我一些建议吗。 额外信息:我把mysql表放在SpringBoot的资源文件夹中。当我使用get方法(Springboot的

  • 问题内容: 我想向Firebase身份验证添加新数据,其中包含显示名称,电话号码,图像之类的数据。但是我想增加更多这样的性别,生日等等。是否可以添加新的? 问题答案: 无法将任意其他数据添加到Firebase身份验证用户配置文件。如果需要,请考虑使用Firebase Realtime数据库(或CloudFirestore)存储其他信息。 自几周前以来,您可以向Firebase身份验证用户配置文件中

  • 我想添加一个新的数据到firebase认证,它有像displayname,电话号码,图像的数据。但我想增加更多这样的性别,生日和更多。有可能添加新的吗?

  • 我正在制作一个程序,该程序应该让用户输入一个字符串,其中包含一个学生的名字,后跟他们的测验、家庭作业和考试分数(用户输入决定每个学生的分数),并获取每个数据段并将其添加到一个数组中。 我计划通过4个不同的数组来做到这一点:1个用于名称,1个用于HW分数,1个用于测验分数,1个用于考试分数。 它的工作原理是为每个学生输入名称,然后输入分数,每个分数前面都有字母,表示分数的类型。例子: 让程序将每个名

  • 我想在mtcars数据集中做类似于将gpm(加仑每英里=1/mpg)模型与wt的拟合。这似乎很容易: 这就得到了一个有6行的行数据帧,正如预期的那样。 这张图确认了六组: 我可以使用augment()获得匹配的输出: 从其他地方的阅读中,我发现group_by和rowwise数据帧不兼容,因此lm1未分组,augment不能关联models和newdata。是否有另一种设计模式可以让我这样做?如果

  • 当我将Decimal(x)值追加到数组时,我希望只得到数字,但它还包括在元素开头的Decimal()函数调用。 代码: 输出: