簡體   English   中英

R 如何通過查找表中的不同 function 匯總多列數據

[英]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.

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