Главная » Статьи » Студентам » Бизнес-аналитика |
Работа с табличными данными в R. Часть 1Data FrameData Frame используются для хранения табличных данных. Они представляют собой особый тип списков (lists), матрицу данных. Это – именованный список векторов одной и той же длины, в которых элементы отвечают за переменные. В отличие от матриц, таблица данных содержит элементы разных классов, т.е. допускаются столбцы с числовыми, текстовыми и логическими значениями. Создать Data FrameДля создания таблицы данных применяется функция data.frame()
> x <- data.frame(foo = 1:4, bar = c(T, T, F, F))
> x
foo bar
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE
Определение таблицы данных на основе векторовОпределим сначала два вектора, а после введем величину d, которая является таблицей данных, включающей эти два вектора: > intake.pre<-c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770) > intake.post<-c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335) > d <- data.frame(intake.pre,intake.post) > d intake.pre intake.post 1 5260 3910 2 5470 4220 3 5640 3885 4 6180 5160 5 6390 5645 6 6515 4680 7 6805 5265 8 7515 5975 9 7515 6790 10 8230 6900 11 8770 7335 Еще один пример по созданию таблицы данных
> name <- c("Anna", "Polina", "Alex", "Tanya", "Andre")
> age <- c(18, 21, 39, 30, 26)
> fam<-c(FALSE,FALSE,TRUE,TRUE,FALSE)
> mydata<-data.frame(name,age,fam)
> mydata
name age fam
1 Anna 18 FALSE
2 Polina 21 FALSE
... Пусть требуется изменить названия столбцов. Тогда
> names(mydata)<-c("First Name", "Age", "Married")
> mydata
First Name Age Married
1 Anna 18 FALSE
... Кроме того, вывод значений 1-го столбца (переменной) осуществляется следующим образом
> mydata$`First Name`
[1] Anna Polina Alex Tanya Andre
Изложенная процедура создания таблицы данных с изменением названий столбцов имеет аналог
> mydata1<-data.frame('First Name'= name, Age=age, Married=fam)
> mydata1
First.Name Age Married
1 Anna 18 FALSE
2 Polina 21 FALSE
... Выбор числа, строк и столбцовДля работы со списком по одной переменной (столбцом) используется знак $ > d$intake.pre [1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770
> d[["intake.pre"]]
[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770
> d[[1]]
[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770
Если нужно взять определенные элементы из вектора, пользуемся записью вида > intake.pre[c(3,5,7)] [1] 5640 6390 6805 Здесь с(…) запись, которая определяет вектор, состоящий из чисел под указанными порядковыми номерами. Это же можно делать следующим образом > v <- c(3,5,7) > intake.pre[v] [1] 5640 6390 6805 Кроме того, применяются логические условия для выбора чисел из вектора intake.post[intake.pre > 7000 & intake.pre <= 8000] [1] 5975 6790 Индексирование с data frame происходит так > d[5,1] [1] 6390 В квадратных скобках первый параметр указывает на номер строки, а второй – столбца. То же самое получаем, если вместо номера указывается наименование переменной
> d[5,"intake.pre"]
[1] 6390
Если нужна конкретная строка целиком, например, 5-я, то записываем > d[5,] intake.pre intake.post 5 6390 5645 Следует подчеркнуть, что запятая нужна. По аналогии получаем все значения по конкретному столбцу d[,2] [1] 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335 или
> mydata[2]
Age
1 18
2 21
3 39
4 30
5 26
Пусть необходимо вывести значения по заданным строкам и столбцам. Для этого следует выполнить
> mydata[c(3,5),c(2,3)]
Age Married
3 39 TRUE
5 26 FALSE
> mydata[c(3,5),c("First Name","Married")]
First Name Married
3 Alex TRUE
5 Andre FALSE
Выбор по условиюЕсли нужна выборка записей (строк), которые соответствуют выполнению условия по одной переменной, то команда имеет такой вид > d[d$intake.pre>7000,] intake.pre intake.post 8 7515 5975 9 7515 6790 10 8230 6900 11 8770 7335 Данную выборку можно получить несколько другим способом > sel <- d$intake.pre>7000 > sel [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE > d[sel,] intake.pre intake.post 8 7515 5975 9 7515 6790 10 8230 6900 11 8770 7335 Шапка – head ()Работая над большим массивом данных, часто есть потребность посмотреть несколько первых строк. В таком случае можно выбрать один из двух способов. > d[1:2,] intake.pre intake.post 1 5260 3910 2 5470 4220 > head(d) intake.pre intake.post 1 5260 3910 2 5470 4220 3 5640 3885 4 6180 5160 5 6390 5645 6 6515 4680 Конец – tail()Чтобы посмотреть конец таблицы, введите tail(). > tail(d) intake.pre intake.post 6 6515 4680 7 6805 5265 8 7515 5975 9 7515 6790 10 8230 6900 11 8770 7335 Сведения о таблице: количество строк и столбцов, их названияЧтобы узнать, сколько строк и столбцов насчитывается в таблице, воспользуемся функцией dim()
> dim(d)
[1] 11 2
Благодаря dimnames() можно увидеть названия строк и столбцов
> dimnames(d)
[[1]]
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
[[2]]
[1] "intake.pre" "intake.post"
Как видим, Data Frame имеет особый атрибут raw.names
> row.names(d)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
Чтобы узнать и применять в дальнейших расчетах количество строк, вводим функцию nrow(). А количество столбцов определяется через ncol().
> nrow(d)
[1] 11
> ncol(d)
[1] 2
Полезной функцией для получения информации о таблице данных является str()
> str(d)
'data.frame': 11 obs. of 2 variables:
$ intake.pre : num 5260 5470 5640 6180 6390 ...
$ intake.post: num 3910 4220 3885 5160 5645 ...
> str(mydata)
'data.frame': 5 obs. of 3 variables:
$ First Name: Factor w/ 5 levels "Alex","Andre",..: 3 4 1 5 2
$ Age : num 18 21 39 30 26
$ Married : logi FALSE FALSE TRUE TRUE FALSE
При создании таблицы можно указать, что переменная типа “Factor” является “Character” > mydata2<-data.frame(name,age, fam, stringsAsFactors = FALSE) > str(mydata2) 'data.frame': 5 obs. of 3 variables: $ name: chr "Anna" "Polina" "Alex" "Tanya" ... ...
© Источники:
| |
Категория: Бизнес-аналитика | Добавил: kvn2us (25.03.2017) | | |
Просмотров: 6563 | |