Tuesday, July 10, 2018

Rcode advanced dplyr


rm(list = ls())

data("starwars")

#
names(starwars)
head(starwars)

# Đối tên biến
starwars %>% rename(sex = gender)


x1 <- starwars %>% slice(1:5) %>% select(hair_color, gender)
x1
x2 <- starwars %>% slice(6:10) %>% select(hair_color, gender)
x2

# Lấy tập giao (có trong cả 2 tập hợp)
x1 %>% intersect(x2)

# Lấy tập khác (chỉ có ở x1 mà ko có ở x2)
x1 %>% setdiff(x2)
# Chỉ có ở x2 mà ko có ở x1
x2 %>% setdiff(x1)

# lấy tập hợp (có ở x1 hoặc x2)
x1 %>% union(x2)

starwars %>% slice(1:5) %>% select(hair_color, gender) %>%
  union(starwars %>% slice(6:10) %>% select(hair_color, gender)) # kết quả tương tự

# Tạo biến số thứ tự dòng
x1 %>% mutate(id=row_number())
x1 %>% mutate(id=row_number(gender))

# Lấy hạng bằng giá trị min của nhóm bằng nhau
x1 <- starwars %>% slice(10:20) %>% select(hair_color, gender, height)
x1 %>% mutate(rk = min_rank(gender))
x1 %>% mutate(rk = min_rank(hair_color))
x1 %>% mutate(rk = min_rank(height))

# Lấy hạng bằng dense_rank
x1 %>% mutate(rk = dense_rank(gender))
x1 %>% mutate(rk = dense_rank(hair_color))

# percent_rank,
x1 %>% mutate(prk = percent_rank(height))
x1 %>% mutate(prk = percent_rank(height)) %>% mutate(sprk = sum(prk))

#
x1 %>% mutate(prk = cume_dist(height))
x1 %>% mutate(prk = cume_dist(height)) %>% mutate(sprk = sum(prk))

#
select_if(starwars, funs(is.numeric))
select_at(starwars, vars("name", "height"))

#
starwars %>% rename_all(funs(paste0("sw_", .)))
starwars %>% rename_if(funs(is.numeric), funs(str_to_upper)) # những biến là numeric thì sẽ in hoa
starwars %>% rename_at( vars("name", "height"), funs(str_to_upper))

#
starwars %>% filter_at(vars(contains("color")), all_vars(. == "brown"))
starwars %>% filter_at(vars(contains("color")), any_vars(. == "brown"))
starwars %>% filter_if(is.numeric, all_vars(. > 100))

#
starwars %>% mutate_all(as.character)
starwars %>% mutate_if(funs(is.character), funs(as.factor))
starwars %>% mutate_at(vars("height"), funs(. / 10))

#
starwars %>%
  select(1:3) %>%
  mutate(sum(height, na.rm=T))

starwars %>%
  select(1:3) %>%
  mutate(sum(height, mass, na.rm=T)) # công hết cả 2 dãy số vào với nhau

starwars %>%
  select(1:3) %>%
  group_by_all() %>% # group hết tất cả các biến
  mutate(sum(height, mass, na.rm=T))

starwars %>%
  select(1:3) %>%
  group_by_if(is.character) %>% # group nếu là biến character
  count()


group_by_at(starwars, vars("eye_color", "hair_color")) %>%  # không cần phải select
  count()

starwars %>%
  select_if(funs(is.numeric)) %>%  # chọn theo điều kiện
  summarise_all(funs(mean), na.rm = T)

starwars %>% summarise_if(funs(is.numeric), funs(min, median, mean, sd, max), na.rm = T)

starwars %>%
  summarise_if(funs(is.numeric), funs(min, median, mean, sd, max), na.rm = T) %>%
  gather() %>% # chuyển sang dạng long
  arrange(key)

starwars %>%
  summarise_if(funs(is.numeric), funs(min, median, mean, sd, max), na.rm = T) %>%
  gather() %>% # chuyển sang dạng long
  arrange(key)

starwars %>% summarise_at(vars("height", "mass"), funs(sum, mean), na.rm = T)

starwars %>%
  summarise_all(funs(sum(is.na(.)))) %>%
  select_if(any_vars(. > 0))

# Tham khảo: http://rpubs.com/hodgeasaurus/397278

No comments:

Post a Comment