2017-01-08 5 views
0

Я пытался получить описательный stat для своих данных. Я воспользовался многими предложениями. Однако я просто хочу знать, есть ли какой-либо пакет (ы) для выполнения описательной статистики в формате данных, представленном ниже.описательная статистика в r

head(mydata) 
    X A1 A2 A3 M1 M2 M3 U1 U2 U3 
1  A A A M M M U U U 
2 X1 100 200 250 200 230 400 400 100 200 
3 X2 600 300 400 300 550 750 800 900 540 
4 X3 500 300 200 200 200 100 500 400 600 

Данные имеют образцы столбца и переменные в строках. Первая строка - это имя выборки, вторая строка - группы (A, M, U). Я хочу получить описательную статистику для каждой группы. Например, среднее значение, sd .... для группы A (A1, A2, A3). Может кто-нибудь, пожалуйста, дайте мне знать, как я могу это сделать. Я видел большинство ответов на описательную статистику, и они предназначены для столбцов. Пожалуйста, дайте мне знать, если вопрос не ясен. Благодарим вас за помощь.

Хиггс

+0

Я хотел бы предложить, что нашли время, чтобы пройти через эту книгу: http://r4ds.had.co.nz/ – Phil

+1

Ваши данные в нечетном формате и, вероятно, хранится все как текст, а не числа (с например, у вас есть «A» и «100» в том же столбце). Вам будет лучше «переформатировать» ваши данные в длинный формат с тремя столбцами идентификаторов, идущими вниз по странице - Col1 = Sample Group (A/M/U), а затем Col2 = Номер примера (1/2/3) и Col3 = 'X' (X1/X2/X3). Тогда четвертый столбец может быть просто «значением» для каждой комбинации из трех столбцов идентификатора. С этого момента многое проще анализировать - обычно это такие данные, которые будут храниться в настройке реляционной базы данных. – thelatemail

ответ

2

@Phil is dead right с рекомендацией.

Одним из ключевых принципов, которые вы узнаете в книге Хэдли, является принцип аккуратных данных (в основном: переменные в столбцах, отдельные наблюдения в строках). Если вы хотите получить краткое введение в аккуратные данные, попробуйте это vignette.

Существует множество способов для фиксации и анализа ваших данных, но вот пример использования инструментов из «tidyverse».

# Load useful 'tidy data' packages 
library(tidyverse) 

# Make 'mydata' 
mydata <- data_frame(X = c('', 'X1', 'X2', 'X3'), 
        A1 = c('A', 100, 600, 500), 
        A2 = c('A', 200, 300, 300), 
        A3 = c('A', 250, 400, 200), 
        M1 = c('M', 200, 300, 200), 
        M2 = c('M', 230, 550, 200), 
        M3 = c('M', 400, 750, 100), 
        U1 = c('U', 400, 800, 500), 
        U2 = c('U', 100, 900, 400), 
        U3 = c('U', 200, 540, 600)) 

# View 'mydata' 
mydata 

# A tibble: 4 × 10 
     X A1 A2 A3 M1 M2 M3 U1 U2 U3 
    <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> 
1   A  A  A  M  M  M  U  U  U 
2 X1 100 200 250 200 230 400 400 100 200 
3 X2 600 300 400 300 550 750 800 900 540 
4 X3 500 300 200 200 200 100 500 400 600 

Преобразовать в кругленькую dataframe

# Transpose rows and columns and convert resulting matrix back into a dataframe 
mydata_new <- as_data_frame(t(mydata)) 

# View 'mydata_new' 
mydata_new 

# A tibble: 10 × 4 
     V1 V2 V3 V4 
    <chr> <chr> <chr> <chr> 
1   X1 X2 X3 
2  A 100 600 500 
3  A 200 300 300 
4  A 250 400 200 
5  M 200 300 200 
6  M 230 550 200 
7  M 400 750 100 
8  U 400 800 500 
9  U 100 900 400 
10  U 200 540 600 

# Clean 'mydata_new' 
## Add column names 
colnames(mydata_new) <- c('Group', 'X1', 'X2', 'X3') 
## Remove first row 
mydata_new <- mydata_new[-1, ] 

# View cleaned 'mydata_new' 
mydata_new 

# A tibble: 9 × 4 
    Group X1 X2 X3 
    <chr> <chr> <chr> <chr> 
1  A 100 600 500 
2  A 200 300 300 
3  A 250 400 200 
4  M 200 300 200 
5  M 230 550 200 
6  M 400 750 100 
7  U 400 800 500 
8  U 100 900 400 
9  U 200 540 600 

Теперь суммировать данные.

# Summarise numeric data 
mydata_new %>% 
    # Convert all data columns from 'character' to 'numeric' 
    mutate_at(vars(starts_with('X')), 
       as.numeric) %>% 
    # Group data by the grouping variable before summarising 
    group_by(Group) %>% 
    # Calculate MEAN and SD for each data column 
    summarise_at(vars(starts_with('X')), 
       funs(MEAN = mean, SD = sd)) 

# A tibble: 3 × 7 
    Group X1_MEAN X2_MEAN X3_MEAN  X1_SD X2_SD  X3_SD 
    <chr> <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> 
1  A 183.3333 433.3333 333.3333 76.37626 152.7525 152.75252 
2  M 276.6667 533.3333 166.6667 107.85793 225.4625 57.73503 
3  U 233.3333 746.6667 500.0000 152.75252 185.8315 100.00000 
Смежные вопросы