## Data Frame
Dataframe
+-- variables
+-- observations

Dataframe
+-- Elements
    +-- Can be of different classes

data.frame
+-- vectors (of equal length)

data.frame
+-- lists
    +-- vectors of different lengths


```{r}
cha_01 = "One"
cha_02 = "Two"
cha_03 = "Three"
vec_cha = c(cha_01, cha_02, cha_03)
vec_cha
class(vec_cha)

int_01 = 1L
int_02 = 2L
int_03 = 3L
vec_int = c(int_01, int_01, int_01)
vec_int
class(vec_int)

num_01 = 1
num_02 = 2
num_03 = 3
vec_num = c(num_01, num_02, num_03)
vec_num
class(vec_num)
  
log_01 = FALSE
log_02 = TRUE
log_03 = TRUE
vec_log = c(log_01, log_02, log_03)
vec_log
class(vec_log)

dat_01 = as.Date("01/30/2025", format = "%m/%d/%Y")
dat_02 = as.Date("02/28/2025", format = "%m/%d/%Y")
dat_03 = as.Date("03/31/2025", format = "%m/%d/%Y")
vec_dat = c(dat_01, dat_02, dat_03)
vec_dat
class(vec_dat)

df <- data.frame(vec_cha, vec_int, vec_num, vec_log, vec_dat)
df
class(df)
df[2,]  # row 2
df[,3]  # col 3
df[2,5] # cell (2,3)
df$vec_dat
df$vec_dat[3]

df <- data.frame(vec_cha, vec_int, vec_num, vec_log, vec_dat)
df
class(df)
names(df)    # df col names
class(names(df))
names(df)[3] # df col 3 name
names(df)[3] <- paste0(names(df)[3], "_renamed")
names(df)[3] # df col 3 name

df <- data.frame(vec_cha, vec_int, vec_num, vec_log, vec_dat)
df
class(df)
colnames(df)
class(colnames(df))
colnames(df)[3] # df col 3 name
colnames(df)[3] <- paste0(colnames(df)[3], "_renamed")
colnames(df)[3] # df col 3 name
df

df <- data.frame(vec_cha, vec_int, vec_num, vec_log, vec_dat)
df
class(df)
rownames(df)
class(rownames(df))
rownames(df)[3] # df col 3 name
rownames(df)[3] <- paste0(rownames(df)[3], "_renamed")
rownames(df)[3] # df col 3 name
df

# data.frame: create: col
df <- data.frame(vec_cha, vec_int, vec_num, vec_log, vec_dat)
df
class(df)
df$vec_int_num = df$vec_int + df$vec_num
df
```
How do dataframes work in R?

Copy + Paste 
the code on the left
into any .Rmd file

Ctrl + Enter
each line from the top down
See the output
Understand