R语言-数据透视表

# 数据透视表 #
library(tidyverse)

# 1.生成股票数据
stocks <- data.frame(
  time = as.Date('2017-12-01') + 0:4,
  X = rnorm(5, 0, 1),
  Y = rnorm(5, 0, 2),
  Z = rnorm(5, 0, 4)
  ) %>% 
  tibble()
stocks

# 2.宽变长
stocks %>% 
  gather(
    .,
    key = stock,
    value = price,
    -time
    ) %>% 
  # 然后筛选股票Y
  filter(
    .,
    stock == "Y",
    time == "2017-12-02" |
      time == "2017-12-03",
    price <= 3
  ) %>% 
  tibble()

# 将股票X作为参考系
stocks %>% 
  tibble() %>% 
  gather(
    .,
    key = stock, 
    value = price, 
    c(Y, Z)
    ) %>% 
  # 然后筛选固定日期
  filter(
    .,
    time == "2017-12-02" &
      price <= 1.2
  )

# 3.长变宽
stocks %>% 
  gather(
    key = stock, 
    value = price,
    -time
    ) %>% 
  tibble() %>% 
  spread(
    key = stock, 
    value = price
    )
  # 也可以写位于长表的第几列,如key = 2, value = 3

# 将股票X作为参考系
stocks %>% 
  gather(
    key = stock, 
    value = price, 
    c(Y, Z)
    ) %>% 
  spread(
    key = 3, 
    value = 4
    ) %>% 
  tibble()
  # fill = 0 参数设置填充缺失值为0

# 数据分列 #
# 创建数据
df<-data.frame(
  a=c(1,2),
  b=c("a_c","b_c")
  ) %>% 
  tibble()
df

# 列分割
df_separate <- 
  df %>% 
  separate(
    .,
    b,
    into = c("b","c"),
    sep = "_"
    )
df_separate

# 列合并
df_unite <- 
  df_separate %>% 
  unite(
    .,
    col = b,
    c(b,c),
    sep = "_"
    )
df_unite

# 参考文献:
# 1.R包系列——tidyr包教程 - 知乎
# 作者:陈小晖
# https://zhuanlan.zhihu.com/p/32348883
# 2.R语言-数据分列 - 知乎
# 作者:陈小晖
# https://zhuanlan.zhihu.com/p/26361683

https://zhuanlan.zhihu.com/p/208914559

#写法1
pivot_longer(data = mini_iris,
             cols = c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),
             names_to = "flower_attr",
             values_to = "attr_value")

#写法2
mini_iris %>% pivot_longer(cols = contains(c("Length", "width")),
             names_to = "flower_attr",
             values_to = "attr_value")

#写法3
mini_iris %>% pivot_longer(contains(c("Length", "width")), "flower_attr","attr_value")

Guess you like

Origin blog.csdn.net/weixin_42683052/article/details/121109087