簡體   English   中英

在R中使用兩個匯總值將列轉換為行

[英]Converting Columns to Rows with two summary values in R

我有一個像這樣的data.frame:

P   Stat    V   Points
1   Goals   2   10
1   Assists 1   3
2   Goals   1   5
2   Assists 1   3

我想將其轉換為如下形式:

P   Goals   Assists Points
1   2       1       13
2   1       1       8

目前,我正在使用dcast,如下所示:

dcast(stats, P ~ Stat, value.var = "V") ,它僅在沒有“ Points”的情況下工作。 當我在其中添加點時,它開始使用_1,_2等復制新的列名稱。

任何幫助表示贊賞。 這不是一個學校項目,我只是一個好奇的顧問,試圖在我感興趣的問題上恢復我的統計技能!

我們可以進行dcast ,然后添加“積分”列

library(data.table)
dcast(setDT(d1), P~Stat, value.var = "V")[, Points := sum(d1$Points)][]
#     P Assists Goals Points
#1: 1       1     2     13

有(至少)兩種可能性可以達到期望的結果。

使用多個value.vars進行轉換

最新版本的data.table允許將多個value.var指定為dcast()參數:

library(data.table)   # version 1.10.4 used
dcast(DT, P ~ Stat, value.var = list("V", "Points"))
#   P V_Assists V_Goals Points_Assists Points_Goals
#1: 1         1       2              3           10
#2: 2         1       1              3            5

如果只需要一個“ Points列,則需要添加點,並刪除不需要的列。 通過鏈接,可以在一個語句中完成此操作,但並不十分簡潔。

dcast(DT, P ~ Stat, value.var = list("V", "Points"))[
  , Points := Points_Assists + Points_Goals][
    , c("Points_Assists", "Points_Goals") := NULL][]
#   P V_Assists V_Goals Points
#1: 1         1       2     13
#2: 2         1       1      8

投射並加入

另外, V的拋棄和點的聚合可以分步進行,然后將結果合並:

# dcast
temp1 <- dcast(DT, P ~ Stat, value.var = "V")
temp1
#   P Assists Goals
#1: 1       1     2
#2: 2       1     1

# sum points by P
temp2 <- DT[, .(Points = sum(Points)), by = P]
temp2
#   P Points
#1: 1     13
#2: 2      8

現在需要將兩個結果結合起來:

temp1[temp2, on = "P"]
#   P Assists Goals Points
#1: 1       1     2     13
#2: 2       1     1      8

或合並為一個語句:

dcast(DT, P ~ Stat, value.var = "V")[DT[, .(Points = sum(Points)), by = P], on = "P"]

該代碼看起來比第一個變體更直接和簡潔。

數據

library(data.table)
DT <- fread(
  "P   Stat    V   Points
  1   Goals   2   10
  1   Assists 1   3
  2   Goals   1   5
  2   Assists 1   3")

請注意,默認情況下, fread()返回一個data.table對象。 如果DT仍然是data.frame,則需要將其強制為data.table

setDT(DT) 

暫無
暫無

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

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