Как зациклить функцию, включающую подмножества фрейма данных в R? - PullRequest
0 голосов
/ 04 апреля 2019

Я новый пользователь 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)))

Я хочу создать цикл, который будет автоматически определять максимум и минимум каждого подмножества. В идеале, так что он будет печатать все результаты сразу и желательно с меткой, такой как «Макс =». Заранее спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Есть и другие способы сделать это, особенно если у вас очень большие данные. Вот несколько из них: 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 

sapply

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 

tapply

min = with(df, tapply(x, y, min))
max = with(df, tapply(x, y, max))
1 голос
/ 04 апреля 2019

Добро пожаловать в StackOverflow!

Вы можете использовать library(dplyr) и использовать следующие строки кода:

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

Чтобы понять код, прочитайте некоторые введения в Tidyverse, например, здесь или некоторые ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...