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

用dplyr求和多个变量

拓拔安邦
2023-03-14

我试图在一个数据集中的多个主题上求和多个变量。我知道如何使用plyr包来实现这一点;然而,由于数据集的长度,变量的数量,以及我试图做的不同滚动和的数量(2天,3天,4天等)。我想知道是否有人有更多的时间,更有效的方式来完成这项任务在DPLYR。

我的数据与此类似:

Subjects <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
Day <- c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
variable.A <- rnorm(n = Day, mean = 20, sd = 5)
variable.B <- rnorm(n = Day, mean = 50, sd = 15)
variable.C <- rnorm(n = Day, mean = 100, sd = 33)
dat <- data.frame(Subjects, Day, variable.A, variable.B, variable.C)
dat



   Subjects Day variable.A variable.B variable.C
1         1   1   20.17676   72.44022   56.69915
2         1   2   14.11462   46.28473  117.00864
3         1   3   15.30440   72.43752   93.17489
4         1   4   13.72422   66.76744  101.26422
5         1   5   21.97695   69.50480  102.61979
6         2   1   14.45742   32.69106   82.37268
7         2   2   33.37783   65.06782   97.17744
8         2   3   13.57833   26.37183   89.38218
9         2   4   23.01717   55.83446  147.85362
10        2   5   14.06008   32.00396   48.73060
11        3   1   14.57199   60.29746   87.07977
12        3   2   15.77413   77.04517  132.17910
13        3   3   30.05661   30.62220  171.35998
14        3   4   24.65348   53.96450   74.99875
15        3   5   26.93699   57.06393   36.81901
library(plyr)
library(RcppRoll)
summarize <- ddply(dat, "Subjects", mutate,
    Two.Day.Roll.A = roll_sum(variable.A, 2, align = "right", fill = NA),
    Two.Day.Roll.B = roll_sum(variable.B, 2, align = "right", fill = NA),
    Two.Day.Roll.C = roll_sum(variable.C, 2, align = "right", fill = NA))

   Subjects Day variable.A variable.B variable.C Two.Day.Roll.A Two.Day.Roll.B Two.Day.Roll.C
1         1   1  15.324798   24.83074  137.48853             NA             NA             NA
2         1   2  12.112943   58.86094   86.87454       27.43774       83.69168       224.3631
3         1   3  16.179328   57.95450   68.71333       28.29227      116.81544       155.5879
4         1   4  15.319750   38.13721   79.43194       31.49908       96.09171       148.1453
5         1   5  21.791452   61.99368  134.30205       37.11120      100.13089       213.7340
6         2   1  10.937461   63.83164   95.04865             NA             NA             NA
7         2   2  14.642376   79.12452  107.13699       25.57984      142.95616       202.1856
8         2   3  17.519905   52.75490  100.62811       32.16228      131.87942       207.7651
9         2   4  23.190371   37.56950  179.72763       40.71028       90.32440       280.3557
10        2   5  13.729350   46.95616   72.14179       36.91972       84.52566       251.8694
11        3   1   9.609171   74.51140  130.90005             NA             NA             NA
12        3   2  27.542897   14.36222  133.87630       37.15207       88.87363       264.7763
13        3   3  18.750015   60.46183  130.44314       46.29291       74.82405       264.3194
14        3   4  17.461882   52.65797  176.30620       36.21190      113.11979       306.7493
15        3   5  31.244564   62.41614   78.82916       48.70645      115.07411       255.1354

谢谢你。

共有1个答案

仰英发
2023-03-14

以下是DPLYR版本:

library(dplyr)
library(RcppRoll)
dat %>% group_by(Subjects) %>% 
        mutate_each(funs(roll_sum(., 2, align = "right", fill=NA)), -Subjects, -Day)
 类似资料:
  • 我试图计算许多列的行平均值。有人能解释一下为什么下面的代码只计算代码中两个变量(var_1和var_13)的平均值,而不是所有13列的平均值吗?

  • 我有一个名称重复的数据集。如果名称重复,我想创建一个值为1(TRUE)或0(FALSE)的新列。 这是我使用的代码: 或者 然而,我得到了上面可以看到的错误。 另一个想法是使用group_by,然后计算计数。喜欢: 但是,它不能返回原始数据帧后group_by

  • 我正在尝试使用创建一个新列,该列的值基于特定的列。 最后一个数据帧示例(我正在尝试创建): 这个问题基本上与此相反:dplyr-mutate:使用动态变量名。我不能使解决方案适应我的问题。

  • 我有一个带有分组变量的数据帧,我想按组对它们求和。使用很容易。 但是现在我想要一个新的列,按组计算n1和n2的总和。这样地: 我如何使用dplyr? 编辑:实际上,这只是一个例子,我有很多变量。 我试过这两个代码,但它不在正确的维度上......

  • 我想使用在数据帧中创建多个新列。列名及其内容应动态生成。 来自IRIS的示例数据: 我创建了一个函数来从变量中更改新列: