我是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 =”之类的标签。预先感谢您的帮助!
答案 0 :(得分:1)
欢迎使用StackOverflow!
您可以使用library(dplyr)
并使用以下代码行:
df %>%
group_by(y) %>%
summarise(min = min(x),
max = max(x))
答案 1 :(得分:1)
还有其他方法也可以执行此操作,特别是如果您有非常大的数据。这里有一些:for
循环,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))