小编Mar*_*son的帖子

使用dplyr进行交互的频率计数,必须包括零计数

我的问题涉及使用R中的dplyr包编写代码

我有一个相对较大的数据帧(大约500万行),有2列:第一列有个人标识符(id),第二列有日期(date).目前,每行表示日期列中日期上发生的操作(由id列中的个人采取).大约有300,000个独特个体,大约2600个独特日期.例如,数据的开头如下所示:

    id         date
    John12     2006-08-03
    Tom2993    2008-10-11
    Lisa825    2009-07-03
    Tom2993    2008-06-12
    Andrew13   2007-09-11
Run Code Online (Sandbox Code Playgroud)

我想重新整形数据,以便每个可能的idx date对都有一行,另外一列计算在给定日期列出的个体发生的事件总数(可能取值0).

我在dplyr包中取得了一些成功,我用它来表示在数据中观察到的id x日期计数.

这是我到目前为止用于制表idx date计数的代码:(我的数据框称为df)

reduced = df %.% 
  group_by(id, date) %.%
  summarize(length(date))
Run Code Online (Sandbox Code Playgroud)

我的问题是(正如我上面所说)我想要一个数据集,其中包含0个没有任何关联动作的id x日期对.例如,如果在2007-10-10没有观察到John12的动作,我希望输出为该idx date对返回一行,计数为0.

我考虑在上面创建框架,然后使用空框架进行合并,但我确信必须有一个更简单的解决方案.任何建议非常感谢!

interaction r frequency large-data dplyr

10
推荐指数
1
解决办法
9408
查看次数

dplyr使用数据帧的功能进行汇总

我在使用dplyr包执行例程时遇到了一些麻烦.简而言之,我有一个函数,它将数据帧作为输入,并返回一个(数字)值; 我希望能够将此函数应用于数据帧的多个子集.感觉我应该能够使用group_by()指定数据帧的子集,然后传递给summarize()函数,但我不确定如何将(子集化的)数据帧传递给函数I'我想申请.

作为一个简化的例子,假设我正在使用iris数据集,并且我有一个相当简单的函数,我想将其应用于数据的几个子集:

data(iris)
lm.func = function(.data){
  lm.fit = lm(Petal.Width ~ Petal.Length, data = .data)
  out = summary(lm.fit)$coefficients[2,1]
  return(out)
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够根据其他变量(如Species)将此函数应用于虹膜子集.我能够手动过滤数据,然后管道到我的功能,例如:

iris %>% filter(Species == "setosa") %>% lm.func(.)
Run Code Online (Sandbox Code Playgroud)

但我希望能够 基于Species 将lm.func应用于数据的每个子集.我的第一个想法是尝试类似以下内容:

iris %>% group_by(Species) %>% summarize(coef.val = lm.func(.))
Run Code Online (Sandbox Code Playgroud)

即使我知道这不起作用,我的想法是尝试将每个虹膜子集传递给lm.func函数.

为了澄清,我想最终得到一个包含两列的数据帧 - 第一列是每个级别的分组变量,第二列是lm.func的输出,当数据被限制为分组指定的子集时变量.

是否可以以这种方式使用summarize()?

group-by r dplyr

8
推荐指数
1
解决办法
1619
查看次数

标签 统计

dplyr ×2

r ×2

frequency ×1

group-by ×1

interaction ×1

large-data ×1