@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
Я хотел бы предложить, что нашли время, чтобы пройти через эту книгу: http://r4ds.had.co.nz/ – Phil
Ваши данные в нечетном формате и, вероятно, хранится все как текст, а не числа (с например, у вас есть «A» и «100» в том же столбце). Вам будет лучше «переформатировать» ваши данные в длинный формат с тремя столбцами идентификаторов, идущими вниз по странице - Col1 = Sample Group (A/M/U), а затем Col2 = Номер примера (1/2/3) и Col3 = 'X' (X1/X2/X3). Тогда четвертый столбец может быть просто «значением» для каждой комбинации из трех столбцов идентификатора. С этого момента многое проще анализировать - обычно это такие данные, которые будут храниться в настройке реляционной базы данных. – thelatemail