【R】【数据处理】如何用R实现数据透视表的操作?(二)

R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。

【tidyr】主要功能包括

  • 数据变形(reshape data)
  • 分割数据(split data)
  • 处理缺失值(handle missing values)

数据变形


 

【gather】将宽数据转为长数据

#理解,两个坐标轴确定一个平面点的位置

tidyr::gather(data, key, value, ..., na.rm=FALSE)

  • data tibble或data frame数据
  • key 新数据中用于存放关键词的 字段名
  • value 新数据中用于存放value的 字段名
  • ... 新数据关键词来源
mydata <- tibble(
  country=c(‘A‘, ‘B‘, ‘C‘),
  ‘1999‘=c(‘0.7k‘, ‘37k‘, ‘212k‘),
  ‘2000‘=c(‘2k‘, ‘80k‘, ‘213k‘)
)

gather(mydata, key="year", value="cases", ‘1999‘, ‘2000‘)
mydata %>% gather(key="year", value="cases", ‘1999‘, ‘2000‘)

【R】【数据处理】如何用R实现数据透视表的操作?(二)

gather可以指定要gather的若干列

mtcarsNew <- mtcars %>% gather(`gear`,`carb`,key = "attribute", value = "value", -car) #不连续筛选
mtcarsNew <- mtcars %>% gather(mpg:drat,key = "attribute", value = "value", -car) #连续筛选,-car表示不选

【R】【数据处理】如何用R实现数据透视表的操作?(二)

 

【spread】将长数据转为宽数据,与gather互为逆反操作

tidyr::spread(data, key, value,fill=NA, convert=FALSE, drop=TRUE)

  • data: 数据源
  • key:将变量扩展为字段的变量
  • value:需要分散的值
  • fill:将fill的赋值给转型后的 缺失值
mydata<- tibble(
    country=rep(c(‘A‘, ‘B‘, ‘C‘), each=4),
    year=rep(c(1999,2000), each=2, time=3),
    type=rep(c(‘cases‘, ‘pop‘), time=6),
    count=c(‘0.7k‘, ‘19m‘, ‘2k‘, ‘20m‘, ‘37k‘, ‘172m‘, ‘80k‘, ‘174m‘, ‘212k‘, ‘1t‘, ‘213k‘, ‘1t‘)
)

spread(mydata, key=type, value=count)
mydata %>% spread(key=type, value=count)

【R】【数据处理】如何用R实现数据透视表的操作?(二)

分割数据与合并数据


 【separate】将一列按照分隔符分隔为多列

tidyr::separate(data, col, into, sep)

  • data 原始数据
  • col 待分数据所在的列(字段、变量)
  • into 分割后形成的数据对应的字段(变量)
  • sep 分割数据时使用的风格符
table3 <- tibble(
    country=rep(c("A", "B", "C"), each=2),
    year=rep(c(1999, 2000), time=3),
    rate=c("0.7k/19m", "2k/20m", "37k/172m", "80k/174m", "212k/1t", "213k/1t")
)
separate(table3, col=rate, into=c("cases", "pop"), sep="/")

【R】【数据处理】如何用R实现数据透视表的操作?(二)

【separate_rows】将数据分为多行

tidyr::separate_rows(data, ..., sep)

  • data 原始数据
  • ... 待分数据所在的列(字段、变量)
  • sep 分割数据时使用的风格符
separate_rows(table3, rate, sep=‘/‘)

【R】【数据处理】如何用R实现数据透视表的操作?(二)

【unite】将多列按照指定的分隔符合并为一列

tidyr::unite(data, col, ..., sep, remove=TRUE)

  • data 原始数据
  • col  新生成的字段(变量、列)名
  • ... 合并前的字段(变量、列)名
  • sep 合并使用的分割符
  • remove 是否删除被组合的列
table5 <- tibble(
    country=rep(c("Afghan", "Brazil", "China"), each=2),
    century=rep(c(‘19‘, ‘20‘), time=3),
    year=rep(c(‘99‘, ‘00‘), time=3)
)
unite(table5, col="year", century, year, sep="")

【R】【数据处理】如何用R实现数据透视表的操作?(二)

处理缺失值


 

【缺失值识别】

is.na(), is.nan(), is.infinite()

 

【drop_na】剔除数据中的缺失值

x <- tibble(x1=c("A", "B", "C", "D", "E"),
            x2=c(1, NA, NA, 3, NA))
drop_na(x, x2) #数据集,指定列

【R】【数据处理】如何用R实现数据透视表的操作?(二)

 【fill】将数据中的缺失值进行填充(填充的值是缺失值附近的数值)

tidyr::fill(data, ..., direction=c("down", "up"))

fill(x, x2) #默认是用上一个值填充

【R】【数据处理】如何用R实现数据透视表的操作?(二)

 【replace_na】将缺失值替换为其它值

tidyr::replace_na(data, replace=list(), ...) 

replace_na(x, list(x2=2))

  

参考:R----tidyr包介绍学习 - Little_Rookie - 博客园 (cnblogs.com)R语言 | 数据操作tidyr包 - thunderhit的个人空间 - OSCHINA - 中文开源技术交流社区

 

【R】【数据处理】如何用R实现数据透视表的操作?(二)

上一篇:数据结构-基础2021大纲


下一篇:Windows界面编程-背景图片、透明特效使用