相关疑难解决方法(0)

对data.frame中的多个变量按组计算平均值和标准差

编辑 - 这个问题最初的标题是"R中的长到宽数据重塑"


我只是在学习R并试图找到方法来应用它来帮助我生命中的其他人.作为一个测试用例,我正在努力重塑一些数据,而且我在跟踪我在网上发现的例子时遇到了麻烦.我开始的是这样的:

ID  Obs 1   Obs 2   Obs 3
1   43      48      37
1   27      29      22
1   36      32      40
2   33      38      36
2   29      32      27
2   32      31      35
2   25      28      24
3   45      47      42
3   38      40      36
Run Code Online (Sandbox Code Playgroud)

而我想要最终得到的将是这样的:

ID  Obs 1 mean  Obs 1 std dev   Obs 2 mean  Obs 2 std dev
1   x           x               x           x
2   x           x               x           x
3   x           x               x           x
Run Code Online (Sandbox Code Playgroud)

等等.我不确定的是我是否需要在长篇数据中提供更多信息,或者是什么.我想,数学部分(找到平均值和标准偏差)将是容易的部分,但我找不到一种似乎能够正确地重塑数据以开始该过程的方法.

非常感谢您的帮助.

aggregate r reshape reshape2

25
推荐指数
5
解决办法
9万
查看次数

如何对by中的多个列应用多个功能?

我试图通过分组变量将多个功能应用于多个列。我可以获得结果,但是没有有用的格式。在下面,我希望res2是by变量by“ cyl”的res1的扩展,并且与cyl的唯一值一样多。

我尝试省略unlist并重新定义my.sum.function以返回数字而不是列表。但是我无法获得所需的格式。

library(data.table)

## The well known data 
data(mtcars)
DT <- data.table(mtcars)

## a custom set of summary functions
my.sum.fun = function(x){list(
    mean   = mean(x, na.rm=T),
    median = median(x, na.rm=T),
    sd     = sd(x, na.rm=T)
    )}

## I can summarize multiple columns. This works
res1 <- DT[,unlist(lapply(.SD,my.sum.fun)),.SDcols=c("mpg","hp")]
res1
 mpg.mean mpg.median     mpg.sd    hp.mean  hp.median      hp.sd 
 20.090625  19.200000   6.026948 146.687500 123.000000  68.562868 

## Now I add a by column. What I would like is the format as res1 but with the by …
Run Code Online (Sandbox Code Playgroud)

r data.table

5
推荐指数
1
解决办法
86
查看次数

使用lapply(.SD,...)计算多个聚合

我想使用data.table的lapply(.SD, ...)方法执行多个聚合,即计算几个变量的几个不同的汇总统计数据.但我的猜测是如何以错误或相当于rbind而不是错误的方式结束cbind.

例如,要通过cyl获得mtcars的平均值和中位数mpg,可以执行以下操作:

mtcars.dt <- data.table(mtcars)
mtcars.dt[, list(mpg.mean = mean(mpg), mpg.median = median(mpg)), by = "cyl"]
# Result:
    cyl mpg.mean mpg.median
|1:   6    19.74       19.7
|2:   4    26.66       26.0
|3:   8    15.10       15.2
Run Code Online (Sandbox Code Playgroud)

但是应用这种.SD方法可以解决这些问题:

mtcars.dt[, lapply(.SD, function(x) list(mean(x), median(x))),
          by = "cyl", .SDcols = c("mpg")]
# Result:
   cyl              mpg
1:   6 19.7428571428571
2:   6             19.7
3:   4 26.6636363636364
4:   4               26
5:   8             15.1
6:   8             15.2
Run Code Online (Sandbox Code Playgroud)

或完全打破:

mtcars.dt[, lapply(.SD, list(mean, median)), …
Run Code Online (Sandbox Code Playgroud)

r data.table

4
推荐指数
2
解决办法
3606
查看次数

标签 统计

r ×3

data.table ×2

aggregate ×1

reshape ×1

reshape2 ×1