簡體   English   中英

我需要幫助思考如何拆分數據框以執行操作

[英]I need help thinking about how to split a data frame to perform operations

我是R的新手,很難想出解決問題的正確方法。 我習慣於在excel中進行大部分數據分析,所以我認為我被困在電子表格中。 現在我進入的數據太大而無法在excel中輕松完成,所以我想進入燈光並使用R.提前感謝您的任何幫助。

所以我們以ChickWeight為例:

> head(ChickWeight)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

假設我希望能夠通過飲食和時間點分割數據框,這樣就可以很容易地生成平均權重表,其中列的時間和行的飲食。 就像是:

  0   2   4   6 (time)
1   
2    <average weights
3         go in here>
4
(diet)

在我的腦海中,最簡單的方法是生成一個包含這些值的二維數組,以便我可以像average_weight[<Time>][<Diet>]一樣訪問它們。

我想通過使用average_weight[<Time>][]類的東西輕松訪問給定時間或給定飲食的所有平均體重

我已經意識到我沒有正確地考慮這個問題,因為我找到的工具似乎都沒有讓我指出正確的方向。 我最接近的是使用split()

chicks_by_time_and_diet <- split(ChickWeight, list(ChickWeight$Time, ChickWeight$Diet))

但是這會返回長度為55的列表,而不是二維數組。 我也試過調查plyr 這聽起來就像我想要的那樣,但我不清楚如何在這方面使用它。

任何幫助表示贊賞,謝謝!

額外獎勵:實際上我的數據框有比ChickWeight更多的因素,如果可以訪問給定“時間”和“飲食”的所有因素,那將是理想的。

例如假裝ChickWeight有另一個因素, height 是否可以將給定飲食的平均heightweight都存儲在數組中的特定位置,以便average_weight_and_height[<Time>][<Diet>]返回(weight, height)列表?

使用dplyr/tidyr

library(dplyr)
library(tidyr)
ChickWeight %>% 
       group_by(Time, Diet) %>% 
       summarise(weight=mean(weight)) %>%
       spread(Time, weight)

tapply就是這樣做的:

> with(ChickWeight, tapply(weight, list(Time, Diet), mean))
           1     2     3        4
0   41.40000  40.7  40.8  41.0000
2   47.25000  49.4  50.4  51.8000
4   56.47368  59.8  62.2  64.5000
6   66.78947  75.4  77.9  83.9000
8   79.68421  91.7  98.4 105.6000
10  93.05263 108.5 117.1 126.0000
12 108.52632 131.3 144.4 151.4000
14 123.38889 141.9 164.5 161.8000
16 144.64706 164.7 197.4 182.0000
18 158.94118 187.7 233.1 202.9000
20 170.41176 205.6 258.9 233.8889
21 177.75000 214.7 270.3 238.5556

您也可以使用data.tabledplyr ,但您需要重新設置結果以獲得2D(或3D)格式:

library(data.table)
DT <- data.table(ChickWeight)[, mean(weight), by=.(Time, Diet)]
dcast.data.table(DT, Time ~ Diet)

或者,正如Arun指出的那樣(這里我們只使用普通數據框):

reshape2::dcast(ChickWeight, Time ~ Diet, value.var="weight", fun.aggregate=mean)

許多R分析涉及以“長格式”(在我們dcast之前參見DT )來dcast ,其中維度由列表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM