簡體   English   中英

如何在R中循環涉及一個數據幀子集的函數?

[英]How to loop a function involving subsets of a data frame in R?

我是R的新用戶,在創建循環時遇到了一些困難。 我在下面做了一個簡單的數據版本,以說明我要做什么。

#My Data:

set.seed(123)
x <- runif(10,1,100)
y <- sample(LETTERS[1:3],10,replace=TRUE)

#Then I made subsets of my data in a data frame: 

df <- data.frame(x,y)
A <- subset(df, y=='A')
B <- subset(df, y=='B')
C <- subset(df, y=='C')

#I'm able to get the max and min of each subset like this: 

print(paste('A Max = ',max(A$x))); print(paste('A Min = ',min(A$x)))
print(paste('B Max = ',max(B$x))); print(paste('B Min = ',min(B$x)))
print(paste('C Max = ',max(C$x))); print(paste('C Min = ',min(C$x)))

我想創建一個循環,該循環將自動找到每個子集的最大值和最小值。 理想情況下,它將一次打印所有結果,最好使用“ Max =”之類的標簽。 在此先感謝您的幫助!

歡迎來到StackOverflow!

您可以使用library(dplyr)並使用以下代碼行:

df %>% 
  group_by(y) %>% 
  summarise(min = min(x),
            max = max(x))

要了解閱讀一些介紹到tidyverse的代碼,例如這里的鏈接,或者一些在這里

還有其他方法可以執行此操作,特別是如果您有非常大的數據。 這里有一些: for -loop, sapplytapply

for循環

for (i in LETTERS[1:3]) {
  cat(i, 'Max =', max(df$x[df$y == i]), '\n')
  cat(i, 'Min =', min(df$x[df$y == i]), '\n')
}

A Max = 94.10626 
A Min = 53.28244 
B Max = 88.41872 
B Min = 79.04221 
C Max = 46.20486 
C Min = 5.510093 

貼上

invisible(
  sapply(LETTERS[1:3], function(i) {
    cat(i, 'Max =', max(df$x[df$y == i]), '\n')
    cat(i, 'Min =', min(df$x[df$y == i]), '\n')
  })
)

A Max = 94.10626 
A Min = 53.28244 
B Max = 88.41872 
B Min = 79.04221 
C Max = 46.20486 
C Min = 5.510093 

輕拍

min = with(df, tapply(x, y, min))
max = with(df, tapply(x, y, max))

暫無
暫無

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

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