[英]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 =”之類的標簽。 在此先感謝您的幫助!
還有其他方法可以執行此操作,特別是如果您有非常大的數據。 這里有一些: for
-loop, sapply
和tapply
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.