学习小组Day 6笔记-K-molar

一、初步认识tidyr包

1.首先安装tidyr包

install.package("tidyr")

2.初步了解tidyr包的知识

必应搜索tidyr,找到相关介绍tidyr包的知识(https://tidyr.tidyverse.org/, https://www.r-bloggers.com/data-manipulation-with-tidyr/)
tidyr包中主要涉及:

1)缺失值的简单补齐

2)长形表变宽形表与宽形表变长形表

3)列分割与列合并

二、初步应用tidyr包

1.缺失值的简单补齐


> library(tidyr)#加载包
> library(dplyr)#加载包

载入程辑包:‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

> #创建含有缺失值的数据框示例
> x <- c(1,2,7,8,NA,10,22,NA,15)
> y <-c('a',NA,'b',NA,'b','a','a','b','a')
> df <- data.frame(x = x, y = y)
> df
   x    y
1  1    a
2  2 <NA>
3  7    b
4  8 <NA>
5 NA    b
6 10    a
7 22    a
8 NA    b
9 15    a
> drop_na(df)
   x y
1  1 a
3  7 b
6 10 a
7 22 a
9 15 a
> x <- c(1,2,7,8,NA,10,22,NA,15)
> y <-c('a',NA,'b',NA,'b','a','a','b','a')
> df <- data.frame(x = x, y = y)
> df
   x    y
1  1    a
2  2 <NA>
3  7    b
4  8 <NA>
5 NA    b
6 10    a
7 22    a
8 NA    b
9 15    a
> fill(df)#根据上一行的数值填充
   x    y
1  1    a
2  2 <NA>
3  7    b
4  8 <NA>
5 NA    b
6 10    a
7 22    a
8 NA    b
9 15    a
> fill(df,c(x,y))#根据上一行的数值填充
   x y
1  1 a
2  2 a
3  7 b
4  8 b
5  8 b
6 10 a
7 22 a
8 22 b
9 15 a
> replace_na(df,list(x=2,y=b))#空值填进去特定的一个数值
Error in is_list(replace) : object 'b' not found
> replace_na(df,list(c(x=2,y=b))#空值填进去特定的一个数值
+ )
Error: unexpected input in:
"replace_na(df,list(c(x=2,y=b))#空值填进去特定的一个数值
?
> replace_na(df,list(c(x=2,y=b)))#空值填进去特定的一个数值
Error in is_list(replace) : object 'b' not found
> replace_na(df,list(x=2)#空值填进去特定的一个数值
+ )
   x    y
1  1    a
2  2 <NA>
3  7    b
4  8 <NA>
5  2    b
6 10    a
7 22    a
8  2    b
9 15    a
> replace_na(df,list(y=b))#空值填进去特定的一个数值
Error in is_list(replace) : object 'b' not found
> replace_na(df,list(y="b"))#空值填进去特定的一个数值
   x y
1  1 a
2  2 b
3  7 b
4  8 b
5 NA b
6 10 a
7 22 a
8 NA b
9 15 a
> x <- c(1,2,7,8,NA,10,22,NA,15)
> y <-c('a',NA,'b',NA,'b','a','a','b','a')
> df <- data.frame(x = x, y = y)
> replace_na(df,list(x=2,y="b"))#空值填进去特定的一个数值
   x y
1  1 a
2  2 b
3  7 b
4  8 b
5  2 b
6 10 a
7 22 a
8  2 b
9 15 a
> x <- c(1,2,7,8,NA,10,22,NA,15)
> y <-c('a',NA,'b',NA,'b','a','a','b','a')
> df <- data.frame(x = x, y = y)
> df
   x    y
1  1    a
2  2 <NA>
3  7    b
4  8 <NA>
5 NA    b
6 10    a
7 22    a
8 NA    b
9 15    a
> #计算x的均值和中位数
> x_mean <- mean(df$x, na.rm = TRUE)
> x_mean
[1] 9.285714
> #计算y的众数
> y_mode <- as.character(df$y[which.max(table(df$y))])
> y_mode
[1] "a"
> table(df$y)

a b 
4 3 
> which.max(table(df$y))
a 
1 
> f$y[which.max(table(df$y))]
Error: object 'f' not found
> df$y[which.max(table(df$y))]
[1] a
Levels: a b
> #替换数据框df中x和y的缺失值
> df2 <- replace_na(data = df, replace = list(x = x_mean, y = y_mode))
> df2
          x y
1  1.000000 a
2  2.000000 a
3  7.000000 b
4  8.000000 a
5  9.285714 b
6 10.000000 a
7 22.000000 a
8  9.285714 b
9 15.000000 a

2.长形表变宽形表与宽形表变长形表

> #长形表
> name <- c('A','A','A','B','B')
> product <- c('P1','P2','P3','P1','P4')
> price <- c(100,130,55,100,78)
> df_long <- data.frame(name = name, product = product, price = price)
> df_long
  name product price
1    A      P1   100
2    A      P2   130
3    A      P3    55
4    B      P1   100
5    B      P4    78
> #宽形表
> name <- c('A','B','C')
> gender <- c('f','f','m')
> province <- c('JS','SH','HN')
> age <- c(18,22,19)
> df_wide <- data.frame(name = name, gender = gender, province = province, age = age)
> df_wide
  name gender province age
1    A      f       JS  18
2    B      f       SH  22
3    C      m       HN  19
> #使用spread()函数实现长表转宽表,语法如下
> #spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
> #data:为需要转换的长形表
> #key:需要将变量值拓展为字段的变量
> #value:需要分散的值
> #fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
> df_long_expand <- spread(data = df_long, key = product, value = price)
> df_long_expand
  name  P1  P2 P3 P4
1    A 100 130 55 NA
2    B 100  NA NA 78
> #使用gather()函数实现宽表转长表,语法如下:
> #gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
> #data:需要被转换的宽形表
> #key:将原数据框中的所有列赋给一个新变量key
> #value:将原数据框中的所有值赋给一个新变量value
> #...:可以指定哪些列聚到一列中
> #na.rm:是否删除缺失值
> df_wide_gather <- gather(data = df_wide, key = variable, value = value)
Warning message:
attributes are not identical across measure variables;
they will be dropped 
> df_wide_gather
   variable value
1      name     A
2      name     B
3      name     C
4    gender     f
5    gender     f
6    gender     m
7  province    JS
8  province    SH
9  province    HN
10      age    18
11      age    22
12      age    19

3.列分割与列合并

> id <- c(1,2)
> datetime <- c(as.POSIXlt('2015-12-31 13:23:44'), as.POSIXlt('2016-01-28 21:14:12'))
> df <- data.frame(id = id, datetime = datetime)
> df
  id            datetime
1  1 2015-12-31 13:23:44
2  2 2016-01-28 21:14:12
> #将日期时间数据切割为日期和时间两列
> separate <- df %>% separate(., col = datetime, into = c('date', 'time'), sep = ' ', remove = FALSE)
> separate
  id            datetime       date     time
1  1 2015-12-31 13:23:44 2015-12-31 13:23:44
2  2 2016-01-28 21:14:12 2016-01-28 21:14:12
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 今天是最后一天了,看看了任务不轻松呀,加快速度搞定,善始善终。 今天的学习任务是学习一个R包的安装和简单应用(笔记...
    丹keepbetter阅读 397评论 2 1
  • (以下内容引用于生信星球) 学习内容 第一个R包--tidyr 准备工作: 1.1. 学会获取一个R包的小抄 方法...
    Hocchan_7阅读 748评论 0 50
  • 今天下午帮奥迪一起抬缸盖链条断里面了刚开始是排气凸轮轴螺丝松了老是缺缸把正时对好后又把四个凸轮轴链轮都给紧好了装好...
    京心达侯天祥阅读 215评论 0 0
  • 最近和朋友闲聊,发现「丧」已经成了一种普遍感受:欲望低、情绪低、想得而不可得、找寻不到意义和价值。 既然普遍,那一...
    人间的黄昏阅读 193评论 0 1
  • 第一时,①晨起,十念法,愿以此功德,庄严佛净土………给我们的生命定性,今天所遇到的一切都是光明吉祥的………②不论街...
    王涤飞阅读 134评论 0 0