![](/img/trans.png)
[英]R function to summarize multiple columns of data with multiple functions, grouped by a column
[英]R how to summarize multiple columns of data by different function from look up table
我有一個data.table
的多個列,需要根據列名由特定的 function 匯總。
A | B | C | D
1 | 1 | 1 | x
2 | 2 | 2 | y
3 | 3 | 3 | z
應該成為
A | B | C | D
1 | 3 | 6 | z
根據查找表:
A | B | C | D
"min" | "max" | "sum" | "max"
如果查找表中的 function 名稱是有效的 R 函數,我們可以使用match.fun
。
data.frame(Map(function(x, y) match.fun(y)(x), df1, lookup))
# A B C D
#1 1 3 6 z
數據
df1 <- structure(list(A = 1:3, B = 1:3, C = 1:3, D = c("x", "y", "z"
)), row.names = c(NA, -3L), class = c("data.table", "data.frame"))
lookup <- structure(list(A = "min", B = "max", C = "sum", D = "max"),
row.names = c(NA, -1L), class = "data.frame")
你不能真正總結像字母這樣的字符(比如 Z),所以我假設你的意思是這樣的分組摘要數據:
# Create data frame:
A <- c(1,2,3)
B <- c(1,2,3)
C <- c(1,2,3)
D <- c("x", "y", "z")
letters <- data.frame(A,B,C,D)
# Load library for summarizing values:
library(dplyr)
# Summarize and group by specific vector:
letters %>%
group_by(D) %>%
summarize(Min_A = min(A),
Max_B = max(B),
Sum_C = sum(C))
這給了你這個:
D Min_A Max_B Sum_C
<chr> <dbl> <dbl> <dbl>
1 x 1 1 1
2 y 2 2 2
3 z 3 3 3
否則,如果您只是指所有描述性(最小值、最大值等):
# Ungrouped:
letters %>%
summarize(Min_A = min(A),
Max_B = max(B),
Sum_C = sum(C))
這給了你:
Min_A Max_B Sum_C
1 1 3 6
或者,您可以這樣命名:
# Named Ungrouped:
zdata <- letters %>%
summarize(Min = min(A),
Max = max(B),
Sum = sum(C))
rownames(zdata) <- "Max"
zdata
這給了你這個:
Min Max Sum
Max 1 3 6
不完全確定為什么您需要最大 label 用於行,但這將實現您的兩個目標。 dplyr中有很多這樣的功能。 您可以在一本名為 R for Data Science 的書中了解這些函數的背景知識!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.