我有一個關于用戶(ID)的資訊,這些用戶使用不同的作業站(WS)在某個域(DM)中創建檔案,檔案有一定的錯誤率(ER),然后還有更多資訊(作為一個組成示例PP):
df <- tibble("ID" = c("A","B","A","B","A","B","A", "C", "B","A","B","C"),
"WS" = c("a", "b", "a", "b", "a", "b", "a", "b", "a", "b", "a", "b"),
"DM" = c("r", "r", "p", "p", "r", "r", "p", "p", "r", "r", "p", "p"),
"ER" = c(92.91307, 84.93493, 86.46488, 90.83528, 94.30230, 92.85309,
81.14628, 81.33754, 93.22315, 96.83421, 85.76104, 93.71726 ),
"PP" = c(6, 4, 6, 0, 0, 0, 2, 5, 7, 2, 7, 6))
我需要知道每個用戶在每個作業站( numDocs_ID_WS )上創建了多少個檔案,以及錯誤率(avg)是多少:
df_mutA <- df %>%
group_by(ID, WS) %>%
mutate(numDocs_ID_WS = n(),
avg = mean(ER))
df_mutA
現在我努力的是獲取每個用戶正在使用的不同作業站( numWS )的數量。使用summarise()時,我清楚地得到了正確的數字:
df_sumB <- df %>%
group_by(ID, WS) %>%
summarize(numDocs_ID_WS = n(),
avg = mean(ER)) %>%
mutate(numWS = length(ID))
df_sumB
但是這樣一來,我就失去了像PP這樣的額外列。另一方面,使用mutate()而不是summarise()會給出錯誤的結果;跑步時
df_mutB <- df %>%
group_by(ID, WS) %>%
mutate(numDocs_ID_WS = n(),
avg = mean(ER)) %>%
mutate(numWS = length(ID))
df_mutB
numDocs_ID_WS和numWS列的結果顯示相同的結果。
我知道解決這個問題的一種方法是創建一個匯總表并使用連接來獲得正確的最終結果;這對我來說似乎并不優雅,尤其是考慮到必須處理大表(數千行 x 數百列)。我錯過了什么嗎?有沒有一種方法可以一步創建此列(我希望分組能讓我更接近,但我找不到正確的方法)?
非常感謝您的想法和幫助,非常感謝!最好的問候,薩奇克
uj5u.com熱心網友回復:
您只需要更改分組即可:
df %>%
group_by(ID, WS) %>%
mutate(
numDocs_ID_WS = n(),
avg = mean(ER)) %>%
group_by(ID) %>%
mutate(
numWS = n_distinct(WS)
)
# A tibble: 12 x 8
# Groups: ID [3]
# ID WS DM ER PP numDocs_ID_WS avg numWS
# <chr> <chr> <chr> <dbl> <dbl> <int> <dbl> <int>
# 1 A a r 92.9 6 4 88.7 2
# 2 B b r 84.9 4 3 89.5 2
# 3 A a p 86.5 6 4 88.7 2
# 4 B b p 90.8 0 3 89.5 2
# 5 A a r 94.3 0 4 88.7 2
# 6 B b r 92.9 0 3 89.5 2
# 7 A a p 81.1 2 4 88.7 2
# 8 C b p 81.3 5 2 87.5 1
# 9 B a r 93.2 7 2 89.5 2
# 10 A b r 96.8 2 1 96.8 2
# 11 B a p 85.8 7 2 89.5 2
# 12 C b p 93.7 6 2 87.5 1
uj5u.com熱心網友回復:
為每種型別的資料(例如用戶、作業站、摘要 A、摘要 B)設定一個專用表確實是一種非常清晰的存盤結果的方法。連接表是幾乎所有關系資料庫中的默認任務。tidyverse 中的 tidy 這個詞實際上是指 tidy 資料,它只是每個型別的表,每個專案的行。這與面向物件編程密切相關(每個類一個表,這個類的每個物件一個行)。如果對 id 列進行了排序,則連接非常快。在內部,資料框只是指向記憶體各個區域的指標的集合,它只是在控制臺中看起來是一個連貫的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497348.html
標籤:r
上一篇:如何在R中以零為中點創建從min到max的數字序列?
下一篇:如何在R中再應用一個for回圈?