6.4 قالب داده کمی بیشتر

ساختاری پر کاربرد دیگری که خیلی در زبان برنامه نویسی R شناخته شده، قالب داده یا data frame است.

نحوه تعریف یک قالب داده به صورت زیر است:

Code
df <- 
  data.frame(
    "Name" = c("Mohsen", "Xie", "Narges"),
    "Sen" = c(NA, 45, 36),
    "Gender" = factor(
      x = c("Male", NA, "Female"), 
      levels = c("Female", "Male")
    ),
    "Single" = c(TRUE, FALSE, NA)
  )
  • نمایش داده با ساختار قالب داده
Code
df
    Name Sen Gender Single
1 Mohsen  NA   Male   TRUE
2    Xie  45   <NA>  FALSE
3 Narges  36 Female     NA
  • نمایش ساختار داده
Code
str(df)
'data.frame':   3 obs. of  4 variables:
 $ Name  : chr  "Mohsen" "Xie" "Narges"
 $ Sen   : num  NA 45 36
 $ Gender: Factor w/ 2 levels "Female","Male": 2 NA 1
 $ Single: logi  TRUE FALSE NA

6.4.1 انتخاب مقادیر

  • نام سطر و ستون
Code
rownames(df)
[1] "1" "2" "3"
colnames(df)
[1] "Name"   "Sen"    "Gender" "Single"
  • تغییر نام سطر‌ها
Code
rownames(df) <- c("avali", "dovomi", "sevomi")
  • انتخاب ستونی خاص با اندیس
Code
df[, 3]
[1] Male   <NA>   Female
Levels: Female Male
  • انتخاب ستونی خاص با نام
Code
df[, "Gender"]
[1] Male   <NA>   Female
Levels: Female Male
  • انتخاب ستونی خاص با علامت دلار
Code
df$Gender
[1] Male   <NA>   Female
Levels: Female Male
  • انتخاب سطر خاص با اندیس
Code
df[2, ]
       Name Sen Gender Single
dovomi  Xie  45   <NA>  FALSE
  • انتخاب سطر خاص با نام
Code
df["dovomi",]
       Name Sen Gender Single
dovomi  Xie  45   <NA>  FALSE
  • انتخاب سطر با فیلتر کردن برحسب یک مقدار خاص
Code
df[df$Name == "Mohsen", ]
        Name Sen Gender Single
avali Mohsen  NA   Male   TRUE

6.4.2 اتصال دو قالب داده

  • اتصال دو قالب داده بر حسب ستون
Code
df1 <- df[, c("Name", "Sen")]
df2 <- df[, c("Gender", "Single")]

df1 |> cbind(df2)
         Name Sen Gender Single
avali  Mohsen  NA   Male   TRUE
dovomi    Xie  45   <NA>  FALSE
sevomi Narges  36 Female     NA
  • اتصال دو قالب داده بر حسب ردیف
Code
df1 <- df["avali", ]
df2 <- df["dovomi", ]

df1 |> rbind(df2)
         Name Sen Gender Single
avali  Mohsen  NA   Male   TRUE
dovomi    Xie  45   <NA>  FALSE

6.4.3 ادغام دو قالب داده

Code
(df1 = data.frame(id = 1:4, name = c("Mehdi", "Mohsen", "Reza", "Ali")))
  id   name
1  1  Mehdi
2  2 Mohsen
3  3   Reza
4  4    Ali
Code
(df2 = data.frame(id = 2:5, age = c(34, 31, 23, 43)))
  id age
1  2  34
2  3  31
3  4  23
4  5  43
  • مشترک
Code
merge(df1, df2, by = "id")
  id   name age
1  2 Mohsen  34
2  3   Reza  31
3  4    Ali  23
  • همه
Code
merge(df1, df2, by = "id", all = TRUE)
  id   name age
1  1  Mehdi  NA
2  2 Mohsen  34
3  3   Reza  31
4  4    Ali  23
5  5   <NA>  43
  • برحسب اولی
Code
merge(df1, df2, by = "id", all.x = TRUE)
  id   name age
1  1  Mehdi  NA
2  2 Mohsen  34
3  3   Reza  31
4  4    Ali  23
  • برحسب دومی
Code
merge(df1, df2, by = "id", all.y = TRUE)
  id   name age
1  2 Mohsen  34
2  3   Reza  31
3  4    Ali  23
4  5   <NA>  43