Dataframe је најчешћи начин чувања података у R-у. Служи за чување табеларних података, али у основи представља листу и садржи векторе једнаких дужина, који не морају бити истог типа.
Наводимо пример dataframe-a од код кога је једна колона нумеричка, а друга текстуална.
df <- data.frame(kolona1 = c(1, 2, 3), kolona2 = c("a", "b", "c"))
df
## kolona1 kolona2
## 1 1 a
## 2 2 b
## 3 3 c
str(df)
## 'data.frame': 3 obs. of 2 variables:
## $ kolona1: num 1 2 3
## $ kolona2: Factor w/ 3 levels "a","b","c": 1 2 3
Видимо да R текстуалне податке претвара у факторе, а да бисмо то избегли додајемо аргумент stringsAsFactors = FALSE
.
df <- data.frame(kolona1 = c(1, 2, 3), kolona2 = c("a", "b", "c"), stringsAsFactors = FALSE)
str(df)
## 'data.frame': 3 obs. of 2 variables:
## $ kolona1: num 1 2 3
## $ kolona2: chr "a" "b" "c"
Два dataframe-а, са истим бројем врста се могу надовезати по колонама коришћењем функције cbind()
.
df1 <- data.frame(kolona1 = c(1, 2, 3), kolona2 = c("a", "b", "c"), stringsAsFactors = FALSE)
df2 <- data.frame(kolona3 = c(4,5,6), kolona4 = c("d", "e", "f"), stringsAsFactors = FALSE)
df3 <- cbind(df1, df2)
df3
## kolona1 kolona2 kolona3 kolona4
## 1 1 a 4 d
## 2 2 b 5 e
## 3 3 c 6 f
Слично, уколико имају иста имена колона, могу се спојити коришћењем функције rbind()
.
df1 <- data.frame(kolona1 = c(1, 2, 3), kolona2 = c("a", "b", "c"), stringsAsFactors = FALSE)
df2 <- data.frame(kolona1 = c(4,5,6), kolona2 = c("d", "e", "f"), stringsAsFactors = FALSE)
df4 <- rbind(df1, df2)
df4
## kolona1 kolona2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 d
## 5 5 e
## 6 6 f
Елементима dataframe-а се може приступати помоћу оператора $
.
df$kolona1
## [1] 1 2 3
Други приступ елементима је коришћење угластих заграда df[врста, колона]
, где први аргумент одређује које редове желимо да издвојимо, а други које колоне издвајамо.
На пример, желимо да издвојимо први елемент друге колоне…
df[1,2]
## [1] "a"
… или целу прву врсту…
df[1,]
## kolona1 kolona2
## 1 1 a
… или целу другу колону…
df[,2]
## [1] "a" "b" "c"
… или прву и трећу врсту, а све колоне.
df[c(1,3), ]
## kolona1 kolona2
## 1 1 a
## 3 3 c
Можемо да издвојимо све колоне, а оне врсте код којих је вредност у првој колони већа од два.
df4[df4$kolona1 > 2, ]
## kolona1 kolona2
## 3 3 c
## 4 4 d
## 5 5 e
## 6 6 f
Колонама можемо да приступимо и прослеђивањем њихових назива.
df3[, c("kolona1", "kolona3")]
## kolona1 kolona3
## 1 1 4
## 2 2 5
## 3 3 6
Уколико желимо да изоставимо неке редове или колоне, испред индекса треба да ставимо знак -
.
На пример, ако желимо да буде приказано све сем прве колоне…
df3[, -1]
## kolona2 kolona3 kolona4
## 1 a 4 d
## 2 b 5 e
## 3 c 6 f
… или све без прве врсте…
df3[-1,]
## kolona1 kolona2 kolona3 kolona4
## 2 2 b 5 e
## 3 3 c 6 f
или прва и четврта колона, без друге врсте.
df3[-2,c("kolona1", "kolona4")]
## kolona1 kolona4
## 1 1 d
## 3 3 f