以前にコースを旋回学ぶために基本的なデータクリーニング操作、再び含むを再配置します:
- dplyrのパッケージは、アレンジ変異、フィルタを選択し 、GROUP_BYを要約する機能、および%>%の導管動作オペレータ(PIP動作)、「次に」を意味します。
- tidyrのパッケージには、別々の、広がり収集機能を。
- lubridateのパッケージ日付可変レコード更新操作。
1、dplyrパッケージ(新しい、GROUP_BYグループ統計を変異させ、ソートアレンジ、フィルタラインを選択し、列選択を選択し、概要をまとめたもの)
(1)最初のデータを読み出し、データについての情報を表示します。
1つの ライブラリー(dplyr) 2 3 ###イントロ 4 path2csv < - file.path(' 2014-07-08.csv ' ) 5 DF < - read.csv(path2csv、としては。なる = TRUE) 6 DIM(DF) 7 頭(DF) 8 CRAN < - tbl_df(DF) 9 CRAN
(2)データの抽出、フィルタリング、ソート、および他の操作のためのいくつかの一般的な機能を使用して:
1 ##基本的な機能 2 SELECT(CRAN、ip_id、パッケージ、国) #1 CRANデータセット名、ip_id、パッケージは、国がある列名 。3 SELECT(CRAN、r_arch:国) #1 r_archは:国にr_archから採取した列を表し国の列 。4 SELECT(CRAN、国:r_arch) #1 ターンソート 5。 SELECT(CRAN、-time) #は、時間列を取ることはありません 6。 SELECT(CRAN、 - (X:サイズ)) #は、Xの列のサイズを取ることはありません 7。 8。フィルタ(CRAN、パッケージ== " スワール") #1 "渦"すべての行としてパッケージをフィルタリングCRANデータセット、 9フィルタ(CRAN、r_version == " 3.1.1 "、国== " 米国") #2のフィルタ 10のフィルタ(CRAN、r_version <= " 3.0.2 "、国== "IN " ) 11。フィルタ(CRAN、国== " 米国" | ==国」で") #は、正規表現の追加12があるフィルタ(CRAN、!である).Na(r_version) #のすべての非空の行スクリーニングr_version 13は14(cran2、ip_id)配置 #のキーを押して行(デフォルトの順序を昇順ip_id)15整列( cran2、DESC(ip_id)) #行の降順によってはip_id 16 (cran2、パッケージ、ip_id)アレンジ #の列をソートプレスパッケージ、ip_idの並べ替え 17 18であるのmutate(cran3、SIZE_MBサイズ= / 2 ^ 20である) #既存のSIZE_MBの新しいカラムを使用して 19のmutate(cran3、SIZE_MBサイズ= / 20 ^ 2、SIZE_GB = SIZE_MB / 2 ^ 10) #二つの列の作成 20 21集計ライン(cran3、avg_bytes =平均(サイズ)) #1 、要約を全体の統計情報を表示
(3)グループの統計情報や並べ替え:
1 by_package <-group_by(CRAN、パッケージ) #統計パッケージカラムによってグループ化された 2集計行(by_package、平均(サイズ)) #記録された各グループの平均パケット・サイズを計算した後 3。 pack_sum < -集計(by_package、 #1 パケットデータby_package要約統計量 。4 COUNT = N-()、 #のN-()各統計周波数 。5 UNIQUE = n_distinct(ip_id)、 #どのように多くの異なる各ip_id数える 。6つの 国= n_distinct(国)、 。7 avg_bytes = 平均(サイズ) ) 。8 。9分位(pack_sum $ UNIQUE、ちゃったごめんなさい= 150) #計算一意の99%分位 10 top_unique <εフィルタ(pack_sum、ユニーク> 465) #1 フィルタ465は、記録周波数よりも大きい 。11 top_unique_sorted < - アレンジ(top_unique、DESC(一意)) 12は top_countries < -フィルタ(pack_sum、国> 60 ) 13である -結果1 < アレンジ(top_countries、DESC(国)、avg_bytes) 14 プリント(結果1)
(4)工程で、ネストされたコンパクト(3)を使用して:
1結果2 < - 2 アレンジ( 3 フィルタ( 4 集計( #分组数据用集計进行汇总 5 GROUP_BY(CRAN、 6 、パッケージ 7 )、 8 カウント= N()、 9 ユニーク= n_distinct(ip_id)、 10 カ国= n_distinct(国)、 11 avg_bytes = 平均値(大きさ) 12 )、 13 カ国> 60 14 )、 15 DESC(国)、 16 avg_bytes 17 ) 18 19 プリント(結果2)を
(5)操作の記号表現の間%>%を使用して(3):
1 #あなたがそれを読んで、あなたはと%>%演算子を発音することができます 2 #「を」言葉。 3 result3 < - 4 CRAN%>% 5 GROUP_BY(パッケージ)%>% 6 集計(=カウント)(nは、 7 ユニーク= n_distinct(ip_id)、 8 カ国= n_distinct(国)、 9 avg_bytes = 平均(サイズ) 10 )%>% 11 フィルタ(国> 60)%>% 12 (DESC(国アレンジ)、avg_bytes) 13 14 #コンソールへ印刷結果 15を 印刷(result3)
(6)機能と、いくつかのパイプシンボルと一緒に使用:
1つの CRAN%>% 2 を選択し(ip_id、国、パッケージサイズ)%>% 3 のmutate(SIZE_MB =サイズ/ 2 ^ 20)%>% 4 フィルタ(SIZE_MB <= 0.5)%>% 5 アレンジ(DESC(SIZE_MB ))%>% 6 印刷
2、tidyrパッケージ
(1)ギャザー()和別々の():
1つの ライブラリー(tidyr) 2 ライブラリ(readr) 3 ライブラリ(dplyr) 4 5 students2%>% 6 ギャザー(sex_class、カウント、-grade)%>% 7 別個(sex_class、C(" 性別"、" クラス")) %>% 8 印刷
(students2、sex_class、COUNT、グレードの)収集以下
#gatherキーと値のペアに列を収集し、students2データセット、最初の列のグレード収集参加せず、キーと、放電として残りのデータ列名sex_class(キー)と(値)をカウントダウン。
次の列は、二つの別々のsex_class列に分割されます。別々:複数の列に1列を区切ります。
(2)スプレッド():#スプレッド:複数の列を横切って、キーと値のペアを広げ。
1 students3 %>% 2 gather(class, grade, class1:class5, na.rm = TRUE) %>% 3 #name未参与gather,因此照原格式输出 4 spread(test, grade) %>% 5 # spread:Spread a key-value pair across multiple columns. 6 mutate(class=parse_number(class)) %>% 7 # parse_numeric Extract numeric component of variable. 8 print
(3)行合并以及列合并:
1 student_info <- students4 %>% 2 select(id, name, sex) %>% 3 unique() %>% #去除重复记录 4 print 5 6 gradebook <- students4 %>% 7 select(id,class,midterm,final) %>% 8 print 9 10 merge.data.frame(gradebook,student_info,by="id") 11 #列合并不同行数的数据框 12 13 passed<-mutate(passed,status="passed") 14 failed<-mutate(failed,status="failed") 15 bind_rows(passed,failed) 16 #行合并俩个数据框
(4)几个函数一起使用:
1 sat %>% 2 select(-contains("total")) %>% 3 gather(part_sex, count, -score_range) %>% 4 separate(part_sex, c("part", "sex")) %>% 5 group_by(part,sex) %>% 6 mutate( total = sum(count), #统计每组频数 7 prop = count / total) %>% #统计每组里面各分数段比例 8 print
3、lubradate包
(1)获取当前日期时间
1 library(lubridate)
wday(today()) #get the day of the week,such that 1 = Sunday, 2 = Monday
(2)时间数据的录入
1 ymd("1989-05-17") 2 ymd("1989 May 17") 3 mdy("March 12,1975") 4 dmy(25081985) 5 ymd("1920/1/2") 6 7 hms("03:22:14") 8 ymd_hms(c("2010-04-14-04-35-59", "2010-01-01 12:00:00")) 9 ymd_hms(now())
(3)更新时间数据,计算时间间隔