5 album r & b hàng đầu mọi thời đại năm 2022

5 album r & b hàng đầu mọi thời đại năm 2022

Show

Feature Photo: Everett Collection / Shutterstock.com

Well, here we go again as we present our third article in our a series of perfect albums in a row. We started out with this series at three perfect albums in a row and now we’re at five perfect albums in a row. This one is a lot tougher than the first two. It’s also a bit shorter as they were fewer bands that ever released five perfect albums in a row. Now many people argue there is no such thing as a perfect album. We would argue they are wrong. Of course, it depends on how you define the word perfect. We defined the word perfect in rock ‘n’ roll as a great album in which most fans love every single song on the record. And of course,  there could be one or two that aren’t as perfect as the rest of the songs, but are close enough.

We hope you have fun with this one

Five Perfect Albums In A Row

Rush

Rush was one of the bands that benefited immediately from the extra album added as leaving Moving Pictures off our four in a row list really hurt.

2112 – 1976

A Farewell to Kings -1977

Hemispheres – 1978

Permanent Waves – 1980

Moving Pictures – 1981

Metallica

Not everyone loves Metallica’s 1991 album, but we think its great. Their first five albums are simply stunning metal masterpieces

Kill ‘Em All (1983)

Ride the Lightning – 1984

Master of Puppets – 1986

…And Justice for All – 1988

Metallica – 1991

The Police

The Police are the only band on this list in which their five perfect albums in a row also happen to be the only five studio albums the band ever released. That’s called a perfect studio album discography.

Outlandos d’Amour (1978)

Reggatta de Blanc (1979)

Zenyatta Mondatta (1980)

Ghost in the Machine (1981)

Synchronicity (1983)

The Rolling Stones

There are a couple of different places in the Stones catalog where one could count off five perfect albums in a row. However, we think this is the strongest five album stretch in the band’s history.

# 1 – Beggars Banquet – 1968

# 2 – Let It Bleed – 1969

# 3 – Sticky Fingers – 1971

# 4 – Exile on Main St. – 1972

# 5 – Goats Head Soup – 1973

The Beatles

Yes, we know Magical Mystery Tour was released between Sgt. Pepper’s Lonely Hearts Club Band and The White Album. However, in the UK, Magical Mystery Tour was basically a double ep with only six songs. In the US, it was just a compilation of those UK songs and some instrumentals. So we have disqualified Magical Mystery Tour as a complete studio album, therefore, opening the door to The White Album becoming the Beatles Fifth Perfect album in a row.

# 1 – Help! – 1965

# 2 – Rubber Soul – 1965

# 3 – Revolver -1966

# 4 – Sgt. Pepper’s Lonely Hearts Club Band – 1967

# 5 – The Beatles (The White Album) – 1968

Aerosmith

Their first five albums are legendary. Pure rock and roll proving them to be one of the greatest rock bands ever that debuted in the 1970s.

Aerosmith – 1973

Get Your Wings – 1974

Toys in the Attic – 1975

Rocks – 1976

Draw The Line – 1977

Elton John

Madman Across The Water – 1971

Honky Château (1972)

Don’t Shoot Me I’m Only the Piano Player -1973

Goodbye Yellow Brick Road – 1973

Caribou -1974

Billy Joel

Billy Joel’s most underrated album in our opinion is his fifth perfect one in a row. The Nylon Curtain stands as his Sgt Pepper. The four albums that came before it are also spectacular. And the two before that will probably keep Billy Joel on this perfect series of lists for a while.

Turnstiles -1976

The Stranger -1977

52nd Street -1978

Glass Houses  – 1980

The Nylon Curtain – 1982

Led Zeppelin

We hate leaving out Physical Graffiti, but their first five albums are more than perfect, they serve as the soundtrack to so many of our lives…..

Led Zeppelin  – 1969

Led Zeppelin II – 1969

Led Zeppelin III  – 1970

Led Zeppelin IV – 1971

Houses Of The Holy – 1973

Bruce Springsteen

The Wild, the Innocent & the E Street Shuffle -1973

Born to Run -1975

Darkness on the Edge of Town -1978

The River -1980

Nebraska – 1982

Steely Dan

Steely Dan is another band that we could probably rate their entire catalog as perfect…well almost.

Pretzel Logic – 1974

Katy Lied -1975

The Royal Scam – 1976

Aja – 1977

Gaucho – 1980

Queen

# 1 –  Queen II -1974

# 2 – Sheer Heart Attack – 1974

# 3 –  A Night At The Opera – 1975

# 4 –  A Day At The Races – 1976

# 5 –  News Of The World – 1977

The Who

Some people feel the Who By Numbers wasn’t a great album, I think looking back in time it really was.

Tommy – 1969

Live At Leeds – 1970

Who’s Next – 1971

Quadrophenia – 1973

The Who By Numbers – 1975

The Allman Brothers Band

Albums that defined a style of music that no one came close to matching.

The Allman Brothers Band (1969)

Idlewild South (1970)

At Fillmore East (1971, live)

Eat a Peach (1972, part live)

Brothers and Sisters (1973)

David Bowie

So many great albums we could have started at many different places in hs catalog.

Diamond Dogs (1974)

Young Americans – 1975

Station to Station – 1976

Low – 1977

“Heroes” – 1977

and the rest……

The Doors

The Doors -1967

Strange Days -1967

Waiting for the Sun -1968

The Soft Parade -1969

Morrison Hotel – 1970

Stevie Ray Vaughan

Texas Flood (1983)

Couldn’t Stand the Weather (1984)

Soul to Soul (1985)

Live Alive (1986)

In Step (1989)

ZZ Top

Tejas (1976)

Degüello (1979)

El Loco (1981)

Eliminator (1983)

Afterburner (1985)

Blue Oyster Cult

Blue Öyster Cult (1972)

Tyranny and Mutation (1973)

Secret Treaties (1974)

Agents of Fortune (1976)

Spectres (1977)

Foghat

Energized – 1974

Rock and Roll Outlaws -1974

Fool For The City -1975

Night Shift -1976

Foghat Live -1977

Creedence Clearwater Revival

Bayou Country (1969)

Green River (1969)

Willy and the Poor Boys (1969)

Cosmo’s Factory (1970)

Pendulum (1970)

Yes

The Yes Album – 1971

Fragile – 1971

Close to the Edge – 1972

Tales from Topographic Oceans – 1973

Relayer – 1974

Joni Mitchell

Blue – 1971

For the Roses – 1972

Court and Spark – 1974

The Hissing of Summer Lawns -1975

Hejira – 1976

Black Sabbath

Black Sabbath (1970)

Paranoid (1970)

Master of Reality (1971)

Vol. 4 (1972)

Sabbath Bloody Sabbath (1973)

Frank Zappa

Over-Nite Sensation  -1973

Apostrophe (‘) -1974

Roxy & Elsewhere  -1974

One Size Fits All – 1975

Bongo Fury -1975

AC/DC

Dirty Deeds Done Dirt Cheap (1976)

Powerage (1978)

Highway to Hell (1979)

Back in Black (1980)

For Those About to Rock We Salute You (1981)

Grand Funk Railroad

Closer to Home (1970)

Survival (1971)

E Pluribus Funk (1971)

Phoenix (1972)

We’re an American Band (1973)

U2

Boy – 1980

October -1981

War -1983

The Unforgettable Fire -1984

The Joshua Tree -1987

Classic Rock Bands That Released Five Perfect Albums In A Row article published on Classic RockHistory.com© 2022

Classicrockhistory.com claims ownership of all its original content and Intellectual property under United States Copyright laws and those of all other foreign countries. No one person, business, or organization is allowed to re-publish any of our original content anywhere on the web or in print without our permission. All photos used are either public domain creative commons photos or licensed officially from Shutterstock under license with ClassicRockHistory.com. All photo credits have been placed at end of the article.

5 album r & b hàng đầu mọi thời đại năm 2022

What is the 5 albums test?

In 2011, back when I was a writer for The A.V. Club, I invented a game called The Five-Albums Test, in which I listed artists and bands that have at least five consecutive very good-to-great albums.

What is the #1 album right now 2022?

Adele, '30'

What is Maroon 5's biggest hit?

"One More Night" spent nine weeks at #1 on the Billboard Hot 100 and sold over four million copies making it Maroon 5's biggest hit. It also reached #1 at both mainstream and adult pop radio.

When did Maroon 5 break up?

On March 9, 2012, Maroon 5 announced that Jesse Carmichael would take a break from performing with the group for an undetermined amount of time to focus more on his studies of "music and the healing arts" and was replaced by a new keyboardist and background vocalist PJ Morton, who had been touring with them since 2010 ...

Có nhiều từ để xử lý dữ liệu. Bạn có thể làm sạch, hack, thao túng, munge, tinh chỉnh và dọn dẹp bộ dữ liệu của bạn, sẵn sàng cho giai đoạn tiếp theo, điển hình là mô hình hóa và trực quan hóa. Mỗi từ nói điều gì đó về nhận thức đối với quy trình: Xử lý dữ liệu thường được coi là công việc bẩn thỉu, một sự cần thiết khó chịu phải chịu đựng trước khi công việc thực sự, thú vị và quan trọng bắt đầu. Nhận thức này là sai. Lấy dữ liệu của bạn ‘Ship Shape, là một đáng kính và trong một số trường hợp kỹ năng quan trọng. Vì lý do này, chúng tôi sử dụng nghề mộc dữ liệu có thuật ngữ đáng ngưỡng mộ hơn.clean, hack, manipulate, munge, refine and tidy your dataset, ready for the next stage, typically modelling and visualisation. Each word says something about perceptions towards the process: data processing is often seen as dirty work, an unpleasant necessity that must be endured before the real, fun and important work begins. This perception is wrong. Getting your data ‘ship shape’ is a respectable and in some cases vital skill. For this reason we use the more admirable term data carpentry.

Phép ẩn dụ này không phải là tình cờ. Thợ mộc là quá trình lấy những miếng gỗ thô và làm việc với sự chăm sóc, siêng năng và chính xác để tạo ra một sản phẩm hoàn chỉnh. Một thợ mộc không hack vào gỗ một cách ngẫu nhiên. Anh ấy hoặc cô ấy sẽ kiểm tra nguyên liệu thô và chọn công cụ phù hợp cho công việc. Theo cách tương tự, nghề mộc dữ liệu là quá trình lấy thô, thô và ở một mức độ nào đó được sắp xếp ngẫu nhiên dữ liệu đầu vào và tạo dữ liệu được tổ chức và gọn gàng gọn gàng. Học kỹ năng của nghề mộc dữ liệu sớm sẽ mang lại lợi ích trong nhiều năm tới. Hãy cho tôi sáu giờ để chặt cây và tôi sẽ dành bốn lần làm sắc nét đầu tiên rìu như câu nói.

Xử lý dữ liệu là một giai đoạn quan trọng trong bất kỳ dự án nào liên quan đến bất kỳ bộ dữ liệu nào từ các nguồn bên ngoài, tức là & nbsp; hầu hết các ứng dụng trong thế giới thực. Theo cùng một cách mà nợ kỹ thuật, được thảo luận trong Chương 5, có thể làm tê liệt quy trình làm việc của bạn, làm việc với dữ liệu lộn xộn có thể dẫn đến địa ngục quản lý dự án.

May mắn thay, được thực hiện một cách hiệu quả, ngay từ đầu dự án của bạn (thay vì nửa chặng đường, khi có thể là quá muộn) và sử dụng các công cụ phù hợp, giai đoạn xử lý dữ liệu này có thể rất bổ ích. Quan trọng hơn từ góc độ hiệu quả, làm việc với dữ liệu sạch sẽ có lợi cho mọi giai đoạn tiếp theo của dự án R. Vì vậy, đối với các ứng dụng chuyên sâu về dữ liệu, đây có thể là chương quan trọng nhất của cuốn sách. Trong đó, chúng tôi đề cập đến các chủ đề sau:

  • TIDING dữ liệu với Tidyrtidyr
  • Xử lý dữ liệu với DPPLYRdplyr
  • Làm việc với cơ sở dữ liệu
  • Xử lý dữ liệu với dữ liệu. Có thểdata.table

Điều kiện tiên quyết

Chương này phụ thuộc vào một số gói để làm sạch và xử lý dữ liệu - kiểm tra chúng được cài đặt trên máy tính của bạn và tải chúng với:

library("tibble")
library("tidyr")
library("stringr")
library("readr")
library("dplyr")
library("data.table")

RSQLite và GGMAP cũng được sử dụng trong một vài ví dụ, mặc dù chúng không phải là trung tâm của nội dung chương. and ggmap are also used in a couple of examples, although they are not central to the chapter’s content.

5 lời khuyên hàng đầu cho nghề mộc dữ liệu hiệu quả

  1. Thời gian dành cho việc chuẩn bị dữ liệu của bạn lúc đầu có thể tiết kiệm hàng giờ thất vọng trong thời gian dài.
  2. Dữ liệu gọn gàng, cung cấp một khái niệm để tổ chức dữ liệu và gói TIDYR cung cấp một số chức năng cho công việc này.tidyr provides some functions for this work.
  3. Lớp
    library("efficient")
    data(pew) # see ?pew - dataset from the efficient package
    pew[1:3, 1:4] # take a look at the data
    #> # A tibble: 3 x 4
    #>   religion `<$10k` `$10--20k` `$20--30k`
    #>                     
    #> 1 Agnostic      27         34         60
    #> 2 Atheist       12         27         37
    #> 3 Buddhist      27         21         30
    3 được xác định bởi gói Tibble giúp các bộ dữ liệu hiệu quả để in và dễ làm việc.tibble package makes datasets efficient to print and easy to work with.
  4. DPPLYR cung cấp các chức năng xử lý dữ liệu nhanh chóng và trực quan; Data.Table có tốc độ chưa từng có cho một số ứng dụng xử lý dữ liệu. provides fast and intuitive data processing functions; data.table has unmatched speed for some data processing applications.
  5. Toán tử
    library("efficient")
    data(pew) # see ?pew - dataset from the efficient package
    pew[1:3, 1:4] # take a look at the data
    #> # A tibble: 3 x 4
    #>   religion `<$10k` `$10--20k` `$20--30k`
    #>                     
    #> 1 Agnostic      27         34         60
    #> 2 Atheist       12         27         37
    #> 3 Buddhist      27         21         30
    4 ’ống có thể giúp làm rõ quy trình xử lý dữ liệu phức tạp.

Khung dữ liệu hiệu quả với Tibble

Tibble là một gói xác định lớp khung dữ liệu mới cho r,

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5. Các ’tibbble khác nhau (như nhà phát minh của họ cho thấy chúng nên được phát âm) giống như lớp cơ sở
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6, nhưng với việc in, tập hợp và tập hợp yếu tố thân thiện với người dùng hơn.
is a package that defines a new data frame class for R, the
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5. These ‘tibble diffs’ (as their inventor suggests they should be pronounced) are like the base class
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6, but with more user friendly printing, subsetting, and factor handling.

Khung dữ liệu Tibble là một đối tượng S3 với ba lớp,

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5,
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
8 và
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6. Vì đối tượng có thẻ
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6, điều này có nghĩa là nếu phương thức
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5 hoặc
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
8 không có sẵn, đối tượng sẽ được truyền vào hàm
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6 thích hợp.

Để tạo khung dữ liệu tibbble, chúng tôi sử dụng hàm

dim(pew)
#> [1] 18 10
pewt = pivot_longer(data = pew, -religion, names_to = "income", values_to = "count")
dim(pewt)
#> [1] 162   3
pewt[c(1:3, 50), ]
#> # A tibble: 4 x 3
#>   religion                        income   count
#>                                  
#> 1 Agnostic                        <$10k       27
#> 2 Agnostic                        $10--20k    34
#> 3 Agnostic                        $20--30k    60
#> 4 Evangelical Protestant Churches $40--50k   881
4

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C

Ví dụ trên minh họa sự khác biệt chính giữa cách tiếp cận của tibbble và cơ sở R với các khung dữ liệu:tibble and base R approach to data frames:

  • Khi được in, Tibble Diff báo cáo lớp của từng biến.
    library("efficient")
    data(pew) # see ?pew - dataset from the efficient package
    pew[1:3, 1:4] # take a look at the data
    #> # A tibble: 3 x 4
    #>   religion `<$10k` `$10--20k` `$20--30k`
    #>                     
    #> 1 Agnostic      27         34         60
    #> 2 Atheist       12         27         37
    #> 3 Buddhist      27         21         30
    6 Các đối tượng không.
  • Các vectơ ký tự không bị ép buộc thành các yếu tố khi chúng được tích hợp vào
    library("efficient")
    data(pew) # see ?pew - dataset from the efficient package
    pew[1:3, 1:4] # take a look at the data
    #> # A tibble: 3 x 4
    #>   religion `<$10k` `$10--20k` `$20--30k`
    #>                     
    #> 1 Agnostic      27         34         60
    #> 2 Atheist       12         27         37
    #> 3 Buddhist      27         21         30
    5, như có thể thấy bởi tiêu đề
    dim(pew)
    #> [1] 18 10
    pewt = pivot_longer(data = pew, -religion, names_to = "income", values_to = "count")
    dim(pewt)
    #> [1] 162   3
    pewt[c(1:3, 50), ]
    #> # A tibble: 4 x 3
    #>   religion                        income   count
    #>                                  
    #> 1 Agnostic                        <$10k       27
    #> 2 Agnostic                        $10--20k    34
    #> 3 Agnostic                        $20--30k    60
    #> 4 Evangelical Protestant Churches $40--50k   881
    7 giữa tên biến và cột thứ hai. Ngược lại,
    dim(pew)
    #> [1] 18 10
    pewt = pivot_longer(data = pew, -religion, names_to = "income", values_to = "count")
    dim(pewt)
    #> [1] 162   3
    pewt[c(1:3, 50), ]
    #> # A tibble: 4 x 3
    #>   religion                        income   count
    #>                                  
    #> 1 Agnostic                        <$10k       27
    #> 2 Agnostic                        $10--20k    34
    #> 3 Agnostic                        $20--30k    60
    #> 4 Evangelical Protestant Churches $40--50k   881
    8 ép buộc các ký tự thành các yếu tố có thể gây ra vấn đề xa hơn.
  • Khi in một tibbble khác với màn hình, chỉ có mười hàng đầu tiên được hiển thị. Số lượng cột được in phụ thuộc vào kích thước cửa sổ.

Những khác biệt khác có thể được tìm thấy trong trang trợ giúp liên quan -

dim(pew)
#> [1] 18 10
pewt = pivot_longer(data = pew, -religion, names_to = "income", values_to = "count")
dim(pewt)
#> [1] 162   3
pewt[c(1:3, 50), ]
#> # A tibble: 4 x 3
#>   religion                        income   count
#>                                  
#> 1 Agnostic                        <$10k       27
#> 2 Agnostic                        $10--20k    34
#> 3 Agnostic                        $20--30k    60
#> 4 Evangelical Protestant Churches $40--50k   881
9.

Bạn có thể tạo một hàng khung dữ liệu Tibble bằng cách sử dụng hàm

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
0.

Tập thể dục

Tạo khung dữ liệu sau

df_base = data.frame(colA = "A")

Hãy thử và đoán đầu ra của các lệnh sau

print(df_base)
df_base$colA
df_base$col
df_base$colB

Bây giờ tạo một khung dữ liệu tibbble và lặp lại các lệnh trên.

TIDING DỮ LIỆU VỚI TIDYR VÀ Biểu thức chính quy

Một kỹ năng quan trọng trong phân tích dữ liệu là hiểu cấu trúc của các bộ dữ liệu và có thể định hình lại chúng. Điều này rất quan trọng từ góc độ hiệu quả của quy trình công việc: Hơn một nửa thời gian phân tích dữ liệu có thể được dành để định dạng lại các bộ dữ liệu (H. Wickham 2014b), do đó, việc đưa nó trở thành một hình thức phù hợp sớm có thể tiết kiệm giờ trong tương lai. Chuyển đổi dữ liệu thành một hình thức ‘gọn gàng cũng có lợi từ góc độ hiệu quả tính toán: thường nhanh hơn để chạy phân tích và vẽ các lệnh trên dữ liệu gọn gàng.(H. Wickham 2014b), so getting it into a suitable form early could save hours in the future. Converting data into a ‘tidy’ form is also advantageous from a computational efficiency perspective: it is usually faster to run analysis and plotting commands on tidy data.

Việc dọn dẹp dữ liệu bao gồm làm sạch dữ liệu và định hình lại dữ liệu. Làm sạch dữ liệu là quá trình định dạng lại và ghi nhãn dữ liệu lộn xộn. Các gói bao gồm Stringi và StringR có thể giúp cập nhật các chuỗi ký tự lộn xộn bằng cách sử dụng các biểu thức thông thường; Các gói xác nhận và Assertr có thể thực hiện kiểm tra chẩn đoán cho tính toàn vẹn của dữ liệu ngay từ đầu của dự án phân tích dữ liệu. Một tác vụ làm sạch dữ liệu phổ biến là việc chuyển đổi các chuỗi văn bản không chuẩn thành các định dạng ngày như được mô tả trong Vignette Lubridate (xem

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
1). Tuy nhiên, việc TIDING là một khái niệm rộng hơn, tuy nhiên, cũng bao gồm việc định hình lại dữ liệu để nó ở dạng có lợi hơn cho phân tích và mô hình hóa dữ liệu. Quá trình định hình lại được minh họa bằng Bảng 6.1 và 6.2, được cung cấp bởi H. Wickham (2014b) và được tải bằng mã bên dưới:stringi and stringr can help update messy character strings using regular expressions; assertive and assertr packages can perform diagnostic checks for data integrity at the outset of a data analysis project. A common data cleaning task is the conversion of non-standard text strings into date formats as described in the lubridate vignette (see
pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
1). Tidying is a broader concept, however, and also includes re-shaping data so that it is in a form more conducive to data analysis and modelling. The process of reshaping is illustrated by Tables 6.1 and 6.2, provided by H. Wickham (2014b) and loaded using the code below:

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30

Bảng 6.1 và 6.2 hiển thị một tập hợp con của các bộ dữ liệu ‘rộng

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
2 và’ dài (gọn gàng)
pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
3, tương ứng. Chúng có các kích thước khác nhau, nhưng chúng chứa chính xác cùng một thông tin. Tên cột trong mẫu ’rộng trong Bảng 6.1 đã trở thành một biến mới ở dạng‘ dài trong Bảng 6.2. Theo khái niệm về ‘dữ liệu gọn gàng, hình thức dài là chính xác. Lưu ý rằng ’đúng ở đây được sử dụng trong bối cảnh phân tích dữ liệu và trực quan hóa đồ họa. Vì R là ngôn ngữ dựa trên vector, dữ liệu gọn gàng cũng có lợi thế hiệu quả: nó thường nhanh hơn để hoạt động trên một vài cột dài hơn nhiều cột ngắn. Hơn nữa, các gói mạnh mẽ và hiệu quả DPPLE và GGPLOT2 được thiết kế xung quanh dữ liệu gọn gàng. Tuy nhiên, dữ liệu rộng là phổ biến có thể tiết kiệm không gian và phổ biến để trình bày trong các bảng tóm tắt, do đó, rất hữu ích để có thể chuyển giữa các định dạng rộng (hoặc không gọn gàng) và các định dạng gọn gàng.dplyr and ggplot2 were designed around tidy data. Wide data is common, however, can be space efficient and is common for presentation in summary tables, so it’s useful to be able to transfer between wide (or otherwise ‘untidy’) and tidy formats.

Dữ liệu TIDY có các đặc điểm sau (H. Wickham 2014b):(H. Wickham 2014b):

  1. Mỗi biến tạo thành một cột.
  2. Mỗi quan sát tạo thành một hàng.
  3. Mỗi loại đơn vị quan sát tạo thành một bảng.

Bởi vì chỉ có một đơn vị quan sát trong ví dụ (tôn giáo), nó có thể được mô tả trong một bảng duy nhất. Các bộ dữ liệu lớn và phức tạp thường được đại diện bởi nhiều bảng, với các định danh duy nhất hoặc ‘phím, để kết hợp chúng với nhau (CODD 1979).(Codd 1979).

Hai hoạt động phổ biến được tạo điều kiện bởi TIDYR là thu thập và tách các cột.tidyr are gathering and splitting columns.

Làm cho các bảng rộng dài với pivot_longer(pew, -religion) #> # A tibble: 162 x 3 #> religion name value #> #> 1 Agnostic <$10k 27 #> 2 Agnostic $10--20k 34 #> 3 Agnostic $20--30k 60 #> 4 Agnostic $30--40k 81 #> # … with 158 more rows4

Xoay dài hơn có nghĩa là tạo ra các bảng rộng ’dài, bằng cách chuyển đổi tên cột thành một biến mới. Điều này được thực hiện với hàm

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
4 (nghịch đảo là
pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
6). Quá trình này được minh họa trong Bảng 6.1 và 6.2 tương ứng. Mã thực hiện thao tác này được cung cấp trong khối mã bên dưới. Điều này chuyển đổi một bảng với 18 hàng và 10 cột thành bộ dữ liệu gọn gàng với 162 hàng và 3 cột (so sánh đầu ra với đầu ra của
pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
2, được hiển thị ở trên):

dim(pew)
#> [1] 18 10
pewt = pivot_longer(data = pew, -religion, names_to = "income", values_to = "count")
dim(pewt)
#> [1] 162   3
pewt[c(1:3, 50), ]
#> # A tibble: 4 x 3
#>   religion                        income   count
#>                                  
#> 1 Agnostic                        <$10k       27
#> 2 Agnostic                        $10--20k    34
#> 3 Agnostic                        $20--30k    60
#> 4 Evangelical Protestant Churches $40--50k   881

Mã trên cho thấy ba đối số mà

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows
4 yêu cầu:

  1. pivot_longer(pew, -religion)
    #> # A tibble: 162 x 3
    #>   religion name     value
    #>           
    #> 1 Agnostic <$10k       27
    #> 2 Agnostic $10--20k    34
    #> 3 Agnostic $20--30k    60
    #> 4 Agnostic $30--40k    81
    #> # … with 158 more rows
    9, một khung dữ liệu trong đó tên cột sẽ trở thành giá trị hàng.
  2. agesex = c("m0-10", "f0-10") # create compound variable
    n = c(3, 5) # create a value for each observation
    agesex_df = tibble(agesex, n) # create a data frame
    separate(agesex_df, agesex, c("sex", "age"), sep = 1)
    #> # A tibble: 2 x 3
    #>   sex   age       n
    #>     
    #> 1 m     0-10      3
    #> 2 f     0-10      5
    0, tên của biến phân loại mà tên cột trong các bộ dữ liệu gốc được chuyển đổi.
  3. agesex = c("m0-10", "f0-10") # create compound variable
    n = c(3, 5) # create a value for each observation
    agesex_df = tibble(agesex, n) # create a data frame
    separate(agesex_df, agesex, c("sex", "age"), sep = 1)
    #> # A tibble: 2 x 3
    #>   sex   age       n
    #>     
    #> 1 m     0-10      3
    #> 2 f     0-10      5
    1, tên của các cột giá trị ô.

Cũng như các chức năng khác trong ‘Tidyverse, tất cả các đối số được đưa ra bằng cách sử dụng tên trần, thay vì các chuỗi ký tự. Đối số 2 và 3 có thể được người dùng chỉ định và không có liên quan đến dữ liệu hiện có. Hơn nữa, một đối số bổ sung, được đặt là

agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
2, đã được sử dụng để loại bỏ biến tôn giáo khỏi thu thập, đảm bảo rằng các giá trị trong cột này là cột đầu tiên trong đầu ra. Nếu không có đối số
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
2 được chỉ định, tất cả các tên cột được sử dụng trong khóa, có nghĩa là kết quả chỉ cần báo cáo tất cả 180 cặp cột/giá trị do tập dữ liệu đầu vào với 10 cột bằng 18 hàng:

pivot_longer(pew, -religion)
#> # A tibble: 162 x 3
#>   religion name     value
#>           
#> 1 Agnostic <$10k       27
#> 2 Agnostic $10--20k    34
#> 3 Agnostic $20--30k    60
#> 4 Agnostic $30--40k    81
#> # … with 158 more rows

Bảng 6.1: 3 hàng đầu tiên của bộ dữ liệu ‘Pew Pew từ Wickham (2014a) trong một hình thức‘ không gọn gàng.First 3 rows of the aggregated ‘pew’ dataset from Wickham (2014a) in an ‘untidy’ form.
tôn giáo<$10k$ 102020k$ 203030k
Bất khả tri27 34 60
Người vô thần12 27 37
Phật tử27 21 30
Bảng 6.2: Hình thức dài của bộ dữ liệu PEW được biểu thị ở trên cho thấy các giá trị tối thiểu cho thu nhập hàng năm (bao gồm công việc bán thời gian).Long form of the Pew dataset represented above showing the minimum values for annual incomes (includes part time work).
tôn giáoname$ 102020k
Bất khả tri<$10k 27
Bất khả triNgười vô thần34
Bất khả triNgười vô thần60
Người vô thần<$10k 12
Người vô thần$ 102020k27
Người vô thần$ 203030k37
Phật tử<$10k 27
Phật tử$ 102020k21
Phật tử$ 203030k30

Phật tử

Splitting means taking a variable that is really two variables combined and creating two separate columns from it. A classic example is age-sex variables (e.g. 

agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
5 and
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
6 to represent males and females in the 0 to 10 age band). Splitting such variables can be done with the
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
4 function, as illustrated in the Tables 6.3 and 6.4 and in the code chunk below. See
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
8 for more information on this function.

agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5

Chia các biến khớp với
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
4
Joined age and sex variables in one column
Tách có nghĩa là lấy một biến thực sự là hai biến kết hợp và tạo hai cột riêng biệt với nó. Một ví dụ kinh điển là các biến số giới tính tuổi (ví dụ: & nbsp; ________ 75 và
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
6 để đại diện cho nam và nữ trong dải 0 đến 10 tuổi). Tách các biến như vậy có thể được thực hiện với hàm
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
4, như được minh họa trong Bảng 6.3 và 6.4 và trong đoạn mã bên dưới. Xem
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
8 để biết thêm thông tin về chức năng này.
Bảng 6.3: Các biến tuổi và giới tính tham gia trong một cột
Agesex3
N5
M0-10Age and sex variables separated by the function
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
9.
F0-10Bảng 6.4: Các biến tuổi và giới tính được phân tách bằng hàm
agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
9.
Bảng 6.3: Các biến tuổi và giới tính tham gia trong một cột
AgesexN3
M0-10N5

M0-10

F0-10tidyr can perform, as described in the package’s vignette (

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
0). The wider issue of manipulation is a large topic with major potential implications for efficiency (Spector 2008) and this section only covers some of the key operations. More important is understanding the principles behind converting messy data into standard output forms.

Bảng 6.4: Các biến tuổi và giới tính được phân tách bằng hàm

agesex = c("m0-10", "f0-10") # create compound variable
n = c(3, 5) # create a value for each observation
agesex_df = tibble(agesex, n) # create a data frame
separate(agesex_df, agesex, c("sex", "age"), sep = 1)
#> # A tibble: 2 x 3
#>   sex   age       n
#>     
#> 1 m     0-10      3
#> 2 f     0-10      5
9.broom package provides a standard output format for model results, easing interpretation (see the broom vignette). The function
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
1 can be applied to a wide range of model objects and return the model’s output in a standardized data frame output.

Tình dụcdplyr and tidyr function names to allow the use of standard evaluation. Thus the standard evaluation version of

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
3 is
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
4.

tuổi tác

m(e.g. Sanchez 2013), so we’ll just scratch the surface of the topic, and provide a taster of what is possible. Regex is a deep topic. However, knowing the basics can save a huge amount of time from a data tidying perspective, by automating the cleaning of messy strings.

0-10stringr and base R ways of doing pattern matching. The former provides easy to remember function names and consistency. The latter is useful to know as you’ll find lots of base R regex code in other peoples code as stringr is relatively new and not installed by default. The foundational regex operation is to detect whether or not a particular text string exists in an element or not which is done with

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
5 and
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
6 in base R and stringr respectively:

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE

fstringr does not include a direct replacement for

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
7. You can use
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
8 instead.

Các chức năng Tidyr khácstringr functions: they all do. This can be efficient because if you want to do some regex work, you just need to type

head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
0 and then hit Tab to see a list of all the options. The various base R regex function names, by contrast, are harder to remember, including
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
2,
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
3 and
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
4. The stringr equivalents have more intuitive names that relate to the intention of the functions:
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
5,
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
6 and
head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
7, respectively.

Có các hoạt động dọn dẹp khác mà Tidyr có thể thực hiện, như được mô tả trong gói họa tiết của gói (

library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
0). Vấn đề thao túng rộng hơn là một chủ đề lớn với ý nghĩa chính đối với hiệu quả (Spector 2008) và phần này chỉ bao gồm một số hoạt động chính. Quan trọng hơn là hiểu các nguyên tắc đằng sau việc chuyển đổi dữ liệu lộn xộn thành các hình thức đầu ra tiêu chuẩn.

  • Những nguyên tắc tương tự cũng có thể được áp dụng cho việc thể hiện kết quả mô hình. Gói chổi cung cấp định dạng đầu ra tiêu chuẩn cho kết quả mô hình, giảm bớt giải thích (xem họa tiết chổi). Hàm
    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    1 có thể được áp dụng cho một loạt các đối tượng mô hình và trả về đầu ra của mô hình trong một đầu ra khung dữ liệu được tiêu chuẩn hóa.Grolemund and Wickham (2016).
  • Thông thường sẽ hiệu quả hơn khi sử dụng phiên bản đánh giá không chuẩn của các tên biến, vì chúng có thể được tự động hoàn thành bởi RSTudio. Trong một số trường hợp, bạn có thể muốn sử dụng đánh giá tiêu chuẩn và tham khảo các tên biến bằng dấu ngoặc kép. Để thực hiện điều này, việc gắn
    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    2 có thể được thêm vào các tên hàm DPPLY và TIDYR để cho phép sử dụng đánh giá tiêu chuẩn. Do đó, phiên bản đánh giá tiêu chuẩn của
    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    3 là
    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    4.stringr vignette (
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    8).
  • Biểu cảm thường xuyên(Sanchez 2013).
  • Biểu thức chính quy (thường được gọi là Regex) là ngôn ngữ để mô tả và thao tác các chuỗi văn bản. Có những cuốn sách về chủ đề này, và một số hướng dẫn hay về Regex trong R (ví dụ: & NBSP; Sanchez 2013), vì vậy chúng tôi sẽ chỉ làm trầy xước bề mặt của chủ đề và cung cấp một bản mở rộng về những gì có thể. Regex là một chủ đề sâu sắc. Tuy nhiên, biết những điều cơ bản có thể tiết kiệm một lượng lớn thời gian từ góc độ dọn dẹp dữ liệu, bằng cách tự động hóa việc làm sạch các chuỗi lộn xộn.stringi package, on which stringr depends.

Trong phần này, chúng tôi dạy cả hai cách kết hợp chuỗi và cơ sở R. Cái trước cung cấp dễ nhớ tên chức năng và tính nhất quán. Cái sau rất hữu ích để biết khi bạn sẽ tìm thấy rất nhiều mã R Regex cơ sở trong mã người khác vì StringR tương đối mới và không được cài đặt theo mặc định. Hoạt động Regex nền tảng là phát hiện liệu một chuỗi văn bản cụ thể có tồn tại trong một phần tử hay không được thực hiện với
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
5 và
library("stringr")
x = c("Hi I'm Robin.", "DoB 1985")

grepl(pattern = "9", x = x)
#> [1] FALSE  TRUE
str_detect(string = x, pattern = "9")
#> [1] FALSE  TRUE
6 trong cơ sở r và chuỗi tương ứng:

  1. Lưu ý: StringR không bao gồm thay thế trực tiếp cho

    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    7. Bạn có thể sử dụng
    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    8 thay thế.

  2. Lưu ý rằng

    library("stringr")
    x = c("Hi I'm Robin.", "DoB 1985")
    
    grepl(pattern = "9", x = x)
    #> [1] FALSE  TRUE
    str_detect(string = x, pattern = "9")
    #> [1] FALSE  TRUE
    6 bắt đầu với
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    0. Đây là một tính năng phổ biến của các hàm StringR: tất cả đều làm. Điều này có thể hiệu quả bởi vì nếu bạn muốn thực hiện một số công việc Regex, bạn chỉ cần nhập
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    0 và sau đó nhấn Tab để xem danh sách tất cả các tùy chọn. Ngược lại, các tên hàm r regex cơ sở khác nhau khó nhớ hơn, bao gồm
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    2,
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    3 và
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    4. Các tương đương StringR có các tên trực quan hơn liên quan đến ý định của các hàm:
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    5,
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    6 và
    head(pew, 10)
    #> # A tibble: 10 x 10
    #>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
    #>                                       
    #> 1 Agnostic      27         34         60         81         76        137
    #> 2 Atheist       12         27         37         52         35         70
    #> 3 Buddhist      27         21         30         34         33         58
    #> 4 Catholic     418        617        732        670        638       1116
    #> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
    #> #   >150k 
    data(lnd_geo_df)
    head(lnd_geo_df, 10)
    #>                    name_date population      x      y
    #> 1               Bromley-2001     295535 544362 172379
    #> 2               Bromley-2001     295535 549546 169911
    #> 3               Bromley-2001     295535 539596 160796
    #> 4               Bromley-2001     295535 533693 170730
    #> 5               Bromley-2001     295535 533718 170814
    #> 6               Bromley-2001     295535 534004 171442
    #> 7               Bromley-2001     295535 541105 173356
    #> 8               Bromley-2001     295535 544362 172379
    #> 9  Richmond upon Thames-2001     172330 523605 176321
    #> 10 Richmond upon Thames-2001     172330 521455 172362
    7, tương ứng.

head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362

  1. Có nhiều điều khác để nói về chủ đề này nhưng thay vì lặp lại những gì đã được nói ở nơi khác, chúng tôi cảm thấy hiệu quả hơn khi hướng người đọc quan tâm đến các tài nguyên xuất sắc hiện có để học Regex trong R. Chúng tôi khuyên bạn nên đọc theo thứ tự:

  2. Chương chuỗi của Grolemund và Wickham (2016).(Wickham 2010):

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
0

Các họa tiết chuỗi (

head(pew, 10)
#> # A tibble: 10 x 10
#>   religion `<$10k` `$10--20k` `$20--30k` `$30--40k` `$40--50k` `$50--75k`
#>                                       
#> 1 Agnostic      27         34         60         81         76        137
#> 2 Atheist       12         27         37         52         35         70
#> 3 Buddhist      27         21         30         34         33         58
#> 4 Catholic     418        617        732        670        638       1116
#> # … with 6 more rows, and 3 more variables: $75--100k , $100--150k ,
#> #   >150k 
data(lnd_geo_df)
head(lnd_geo_df, 10)
#>                    name_date population      x      y
#> 1               Bromley-2001     295535 544362 172379
#> 2               Bromley-2001     295535 549546 169911
#> 3               Bromley-2001     295535 539596 160796
#> 4               Bromley-2001     295535 533693 170730
#> 5               Bromley-2001     295535 533718 170814
#> 6               Bromley-2001     295535 534004 171442
#> 7               Bromley-2001     295535 541105 173356
#> 8               Bromley-2001     295535 544362 172379
#> 9  Richmond upon Thames-2001     172330 523605 176321
#> 10 Richmond upon Thames-2001     172330 521455 172362
8).stringr and base R that return:

  • Một vectơ logic báo cáo xem mỗi chuỗi có chứa một số hay không.
  • Chỉ hoàn thành các từ, không có ký tự không có chữ cái.

Xử lý dữ liệu hiệu quả với DPPLYR

Sau khi dọn dẹp dữ liệu của bạn, giai đoạn tiếp theo thường là xử lý dữ liệu. Điều này bao gồm việc tạo dữ liệu mới, ví dụ như một cột mới là một số chức năng của các cột hiện có hoặc phân tích dữ liệu, quá trình đặt câu hỏi theo hướng của dữ liệu và xuất kết quả dưới dạng có thể đọc được của người dùng.

Theo lời khuyên trong Phần 4.4, chúng tôi đã chọn cẩn thận một gói thích hợp cho các nhiệm vụ này: DPPLYR, có nghĩa là ‘kìm khung dữ liệu. DPPLYR có một số lợi thế so với cơ sở r và dữ liệu. Các cách tiếp cận có thể sử dụng để xử lý dữ liệu:dplyr, which roughly means ‘data frame pliers’. dplyr has a number of advantages over the base R and data.table approaches to data processing:

  • DPPLYR nhanh để chạy (do phụ trợ C ++ của nó) và trực quan để loại is fast to run (due to its C++ backend) and intuitive to type
  • DPPLYR hoạt động tốt với dữ liệu gọn gàng, như được mô tả ở trên works well with tidy data, as described above
  • DPPPLE hoạt động tốt với cơ sở dữ liệu, cung cấp mức tăng hiệu quả trên các bộ dữ liệu lớn works well with databases, providing efficiency gains on large datasets

Hơn nữa, DPPLYR có hiệu quả để học (xem Chương 10). Nó có một số lượng nhỏ các hàm có tên trực giác, hoặc ‘động từ. Chúng được lấy cảm hứng một phần bởi SQL, một trong những ngôn ngữ được thiết lập lâu nhất để phân tích dữ liệu, kết hợp nhiều hàm đơn giản (như

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
00 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
01, gần như tương tự như
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
02 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
03) để tạo ra các công việc phân tích mạnh mẽ. Tương tự như vậy, các hàm DPPLYR được thiết kế để được sử dụng cùng nhau để giải quyết một loạt các thách thức xử lý dữ liệu (xem Bảng 6.5).dplyr is efficient to learn (see Chapter 10). It has a small number of intuitively named functions, or ‘verbs’. These were partly inspired by SQL, one of the longest established languages for data analysis, which combines multiple simple functions (such as
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
00 and
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
01, roughly analogous to
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
02 and
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
03) to create powerful analysis workflows. Likewise, dplyr functions were designed to be used together to solve a wide range of data processing challenges (see Table 6.5).

Bảng 6.5: Các hàm động từ dplyr.dplyr verb functions.
(các) hàm dplyrSự mô tảChức năng cơ sở R.
bộ lọc (), lát ()Các hàng tập hợp con theo thuộc tính (bộ lọc) hoặc vị trí (lát)tập hợp con(), [
sắp xếp()Trả về dữ liệu được đặt hàng theo (các) biếngọi món()
lựa chọn()Cột tập hợp contập hợp con(), [, [[
đổi tên()Đổi tên cộtcolnames ()
riêng biệt()Trả về các hàng độc đáo! trùng lặp ()
đột biến ()Tạo các biến mới (Transmute bỏ các biến hiện tại)biến đổi(), [[
Tóm tắt ()Thu gọn dữ liệu thành một hàngTổng hợp (), Tapply ()
sample_n ()Trả về một mẫu dữ liệuvật mẫu()

Không giống như các chất tương tự R cơ sở, các chức năng xử lý dữ liệu DPPLYR, hoạt động một cách nhất quán. Mỗi hàm lấy một đối tượng khung dữ liệu làm đối số đầu tiên của nó và dẫn đến khung dữ liệu khác. Các biến có thể được gọi trực tiếp mà không cần sử dụng toán tử

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
04. DPPLYR được thiết kế để được sử dụng với toán tử
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
4 được cung cấp bởi gói Magrittr, cho phép từng giai đoạn xử lý dữ liệu được biểu diễn dưới dạng dòng mới. Điều này được minh họa trong đoạn mã bên dưới, tải một bộ dữ liệu phát thải khí nhà kính gọn gàng từ gói hiệu quả, sau đó xác định các quốc gia có sự tăng trưởng tuyệt đối lớn nhất trong khí thải từ năm 1971 đến 2012:dplyr’s data processing functions work in a consistent way. Each function takes a data frame object as its first argument and results in another data frame. Variables can be called directly without using the
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
04 operator. dplyr was designed to be used with the ‘pipe’ operator
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
4 provided by the magrittr package, allowing each data processing stage to be represented as a new line. This is illustrated in the code chunk below, which loads a tidy country level dataset of greenhouse gas emissions from the efficient package, and then identifies the countries with the greatest absolute growth in emissions from 1971 to 2012:

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
1

Kết quả, được minh họa trong Bảng 6.6, cho thấy Hoa Kỳ có mức tăng trưởng cao nhất và phát thải trung bình từ ngành vận tải, theo sát là Trung Quốc. Mục đích của đoạn mã này không dành cho bạn bằng cách nào đó đọc nó và hiểu nó: Đó là cung cấp một cú pháp độc đáo của DPPLY, được mô tả chi tiết hơn trong suốt thời gian của phần này.dplyr’s unique syntax, which is described in more detail throughout the duration of this section.

Bảng 6.6: 3 quốc gia hàng đầu về khí thải CO2 trung bình từ vận chuyển kể từ năm 1971 và tăng trưởng phát thải vận chuyển trong giai đoạn đó (MTCO2E/năm).The top 3 countries in terms of average CO2 emissions from transport since 1971, and growth in transport emissions over that period (MTCO2e/yr).
Quốc giaBần tiệnSự phát triển
Hoa Kỳ1462 709
Trung Quốc214 656
Ấn Độ85 170

Dựa trên ‘học bằng cách thực hiện đạo đức, phần còn lại của phần này hoạt động thông qua các chức năng này để xử lý và bắt đầu phân tích một bộ dữ liệu về sự bình đẳng kinh tế do Ngân hàng Thế giới cung cấp. Bộ dữ liệu đầu vào có thể được tải như sau:

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
2

DPPLYR là một gói lớn và có thể được coi là một ngôn ngữ theo đúng nghĩa của nó. Theo nguyên tắc ‘Đi bộ trước khi bạn chạy nguyên tắc, chúng tôi sẽ bắt đầu đơn giản, bằng cách lọc và tổng hợp các hàng. is a large package and can be seen as a language in its own right. Following the ‘walk before you run’ principle, we’ll start simple, by filtering and aggregating rows.

Đổi tên cột

Đổi tên các cột dữ liệu là một nhiệm vụ phổ biến có thể làm cho mã viết nhanh hơn bằng cách sử dụng các tên ngắn, trực quan. Hàm DPPLYR

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
06 làm cho điều này dễ dàng.dplyr function
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
06 makes this easy.

Lưu ý trong khối mã này, tên biến được bao quanh bởi các trích dẫn backs (

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
07). Điều này cho phép R tham khảo các tên cột không chuẩn. Cũng lưu ý cú pháp:
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
06 lấy khung dữ liệu làm đối tượng đầu tiên và sau đó tạo các biến mới bằng cách chỉ định
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
09.

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
3

Để đổi tên nhiều cột, các tên biến được phân tách bằng dấu phẩy.

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
10 sẽ đổi tên các biến
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
11 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
12 trong bộ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
13. Trong cơ sở r, hàm tương đương sẽ là
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
14 hoặc
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
15, giả sử chúng tôi đã xử lý các cột thứ nhất và thứ hai.

Thay đổi các lớp cột

Lớp đối tượng R là rất quan trọng đối với hiệu suất. Nếu một lớp được chỉ định không chính xác (ví dụ: & nbsp; nếu các số được coi là yếu tố hoặc ký tự), điều này sẽ dẫn đến kết quả không chính xác. Lớp của tất cả các cột trong khung dữ liệu có thể được truy vấn bằng hàm

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
16 (viết tắt để hiển thị cấu trúc của một đối tượng) .14structure of an object).14

Kiểm tra trực quan dữ liệu (ví dụ: & nbsp; thông qua

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
17) cho thấy rõ rằng tất cả các cột ngoại trừ 1 đến 4 (
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
18,
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
19,
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
20 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
21) nên được số. Lớp của các biến số có thể được thay đổi một-từng cái bằng cách sử dụng
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
22 như sau (sẽ đặt cột
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
23 thành lớp
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
24 nếu nó đã có): 15

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
4

Tuy nhiên, mục đích của các ngôn ngữ lập trình là tự động hóa các tác vụ và giảm gõ. Chunk mã sau đây đảm bảo các biến số trong đối tượng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
25 là
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
24 bằng cách sử dụng cùng một hàm (
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
27 là hàm trợ giúp để chọn các biến và cả các từ có hàm DPPLYR như
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
28 chọn tất cả các cột chứa chuỗi văn bản đã cho):dplyr functions such as
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
28 which select all columns containing a given text string):

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
5

Một cách khác để đạt được kết quả tương tự là sử dụng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
29, chuyển đổi khung dữ liệu thành số
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
30:

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
6

Mỗi phương pháp (cơ sở r và dplyr) có giá trị của nó. Đối với những người đọc mới đến R, những người có kế hoạch sử dụng các gói Tidyverse khác, chúng tôi sẽ cung cấp một chút hướng tới

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
31 cho sự linh hoạt và cú pháp biểu cảm của nó. Các phương pháp khác để đạt được kết quả tương tự bao gồm việc sử dụng các vòng thông qua
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
32 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
33. Chúng được hiển thị trong mã nguồn chương.dplyr) has its merits. For readers new to R who plan to use other tidyverse packages we would provide a slight steer towards
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
31 for its flexibility and expressive syntax. Other methods for acheiving the same result include the use of loops via
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
32 and
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
33. These are shown in the chapter’s source code.

Lọc hàng

DPPLYR cung cấp một cách thay thế để lọc dữ liệu, sử dụng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34. offers an alternative way of filtering data, using
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34.

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
7

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34 linh hoạt hơn một chút so với
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
36:
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
37 hoạt động cũng như
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
38 và có bất kỳ số lượng điều kiện nào (xem
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
39).
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34 nhanh hơn một chút so với cơ sở r.16 Bằng cách tránh ký hiệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
04, DPPLYR làm cho mã tập hợp con thường ngắn gọn và phù hợp với các hàm DPPLYR khác. Đối số đầu tiên là khung dữ liệu và các tên biến thô tiếp theo có thể được coi là đối tượng vector: một tính năng xác định của dplyr. Trong phần tiếp theo, chúng tôi sẽ tìm hiểu làm thế nào cú pháp này có thể được sử dụng cùng với lệnh
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
4 ’đường ống để viết các lệnh thao tác dữ liệu rõ ràng.dplyr makes subsetting code concise and consistent with other dplyr functions. The first argument is a data frame and subsequent raw variable names can be treated as vector objects: a defining feature of dplyr. In the next section we’ll learn how this syntax can be used alongside the
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
4 ‘pipe’ command to write clear data manipulation commands.

Có tương đương DPPLYR của nhiều chức năng R cơ sở nhưng chúng thường hoạt động hơi khác nhau. Ví dụ, DPPLYR tương đương với

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
43 là sử dụng hàm nhóm
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
44 kết hợp với hàm mục đích chung
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
45 (không bị nhầm lẫn với
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
46 trong cơ sở r), như chúng ta sẽ thấy trong Phần 6.4.5.dplyr equivalents of many base R functions but these usually work slightly differently. The dplyr equivalent of
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
43, for example is to use the grouping function
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
44 in combination with the general purpose function
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
45 (not to be confused with
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
46 in base R), as we shall see in Section 6.4.5.

Chuỗi hoạt động

Một tính năng thú vị khác của DPPLE là khả năng hoạt động chuỗi của nó cùng nhau. Điều này khắc phục một trong những vấn đề thẩm mỹ với mã r: bạn có thể kết thúc với các lệnh rất dài với nhiều chức năng được lồng vào nhau để trả lời các câu hỏi tương đối đơn giản. Kết hợp với chức năng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
47, các đường ống có thể giúp ngưng tụ hàng ngàn dòng dữ liệu thành một thứ gì đó có thể đọc được. Tại đây, cách bạn có thể sử dụng các chuỗi để tóm tắt các chỉ mục Gini trung bình mỗi thập kỷ, ví dụ:dplyr is its ability to chain operations together. This overcomes one of the aesthetic issues with R code: you can end-up with very long commands with many functions nested inside each other to answer relatively simple questions. Combined with the
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
47 function, pipes can help condense thousands of lines of data into something human readable. Here’s how you could use the chains to summarize average Gini indexes per decade, for example:

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
8

Thường thì cách tốt nhất để học là thử và phá vỡ một cái gì đó, vì vậy hãy thử chạy các lệnh trên với các động từ dplyr khác nhau. Bằng cách giải thích, đây là những gì đã xảy ra:dplyr verbs. By way of explanation, this is what happened:

  1. Chỉ các cột
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    20 và
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    23 được chọn, sử dụng
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    50.
  2. Một biến mới,
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    51 đã được tạo, để chỉ hiển thị các số liệu thập kỷ (ví dụ: & NBSP; 1989 trở thành năm 1980).
  3. Biến mới này đã được sử dụng để nhóm các hàng trong khung dữ liệu với cùng một thập kỷ.
  4. Giá trị trung bình mỗi thập kỷ đã được tính toán, minh họa mức độ bất bình đẳng thu nhập trung bình là lớn nhất vào năm 1990 nhưng sau đó đã giảm nhẹ.

Hãy cùng hỏi một câu hỏi khác để xem làm thế nào quy trình làm việc chuỗi DPPLYR có thể được sử dụng để trả lời các câu hỏi tương tác: 5 năm không đồng đều nhất đối với các quốc gia có chứa chữ G là gì? Tại đây, cách thức các chuỗi có thể giúp tổ chức phân tích cần thiết để trả lời câu hỏi này từng bước:dplyr chaining workflow can be used to answer questions interactively: What are the 5 most unequal years for countries containing the letter g? Here’s how chains can help organise the analysis needed to answer this question step-by-step:

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
9

Hàm trên bao gồm 6 giai đoạn, mỗi giai đoạn tương ứng với chức năng dòng mới và DPPLY:dplyr function:

  1. Lọc ra các quốc gia mà chúng tôi quan tâm (bất kỳ tiêu chí lựa chọn nào cũng có thể được sử dụng thay cho
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    52).
  2. Nhóm sản lượng theo năm.
  3. Tóm tắt, cho mỗi năm, chỉ số Gini trung bình.
  4. Sắp xếp kết quả bằng chỉ số Gini trung bình
  5. Chỉ chọn 5 năm không đồng đều nhất.

Để xem lý do tại sao phương pháp này được ưu tiên hơn so với phương pháp chức năng lồng nhau, hãy xem phương pháp sau. Ngay cả sau khi thụt lề đúng cách, nó trông khủng khiếp và gần như không thể hiểu được!

df_base = data.frame(colA = "A")
0

Phần này chỉ cung cấp một kỹ năng hơn về những gì có thể có và tại sao nó có ý nghĩa từ các quan điểm hiệu quả viết mã và tính toán. Để biết tài khoản chi tiết hơn về xử lý dữ liệu với R bằng cách sử dụng phương pháp này, chúng tôi khuyên bạn nên sử dụng R cho Khoa học dữ liệu (Grolemund và Wickham 2016).dplyr and why it makes sense from code writing and computational efficiency perspectives. For a more detailed account of data processing with R using this approach we recommend R for Data Science (Grolemund and Wickham 2016).

Bài tập

  1. Hãy thử chạy từng ví dụ chuỗi trên từng dòng, vì vậy hai mục đầu tiên cho ví dụ đầu tiên sẽ trông như thế này:

df_base = data.frame(colA = "A")
1

theo dõi bởi:

df_base = data.frame(colA = "A")
2

Giải thích bằng lời của bạn những gì thay đổi mỗi lần.

  1. Sử dụng các chức năng DPPLYR Chained để trả lời câu hỏi sau: Trong năm nào các quốc gia không có ’một tên trong tên của họ có mức độ bất bình đẳng thấp nhất?dplyr functions to answer the following question: In which year did countries without an ‘a’ in their name have the lowest level of inequality?

Tập hợp dữ liệu

Tập hợp dữ liệu liên quan đến việc tạo các bản tóm tắt dữ liệu dựa trên một biến nhóm, trong một quy trình được gọi là ’-apply-bombine-combine. Kết quả cuối cùng thường có cùng số lượng hàng như có các nhóm. Bởi vì tập hợp là một cách để cô đọng các bộ dữ liệu, nó có thể là một kỹ thuật rất hữu ích để hiểu được các bộ dữ liệu lớn. Mã sau đây tìm thấy số lượng quốc gia duy nhất (quốc gia là biến nhóm) từ bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 được lưu trữ trong gói hiệu quả.efficient package.

df_base = data.frame(colA = "A")
3

Lưu ý rằng mặc dù có gần như \ (8000 \) hàng, có ít hơn 200 quốc gia: các yếu tố sẽ là một cách lưu trữ dữ liệu của các quốc gia hiệu quả hơn về không gian.\(8000\) rows, there are fewer than 200 countries: factors would have been a more space efficient way of storing the countries data.

Để tổng hợp bộ dữ liệu bằng gói dplyr, bạn chia tác vụ thành hai: để nhóm bộ dữ liệu trước và sau đó để tóm tắt, như được minh họa dưới đây.17dplyr package, you divide the task in two: to group the dataset first and then to summarise, as illustrated below.17

df_base = data.frame(colA = "A")
4

Ví dụ trên liên quan đến vấn đề lập trình rộng hơn: một chức năng nên làm bao nhiêu công việc? Công việc có thể đã được thực hiện với một cuộc gọi

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
54 duy nhất. Tuy nhiên, triết lý của Unix nói rằng các chương trình nên làm một việc tốt, đó là cách các chức năng của DPPLYR đã được thiết kế. Các chức năng ngắn hơn dễ hiểu và gỡ lỗi hơn. Nhưng có quá nhiều chức năng cũng có thể làm cho ngăn xếp cuộc gọi của bạn khó hiểu.dplyr’s functions were designed. Shorter functions are easier to understand and debug. But having too many functions can also make your call stack confusing.

Để củng cố điểm, thao tác này cũng được thực hiện dưới đây trên bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
55:

df_base = data.frame(colA = "A")
5

Lưu ý rằng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
45 rất linh hoạt và có thể được sử dụng để trả về một phạm vi thống kê tóm tắt tùy chỉnh:

df_base = data.frame(colA = "A")
6

Để thể hiện sức mạnh của

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
45 được sử dụng trên
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
58, mã trên báo cáo một loạt các số liệu thống kê tóm tắt tùy chỉnh cho mỗi quốc gia:

  • số lượng hàng trong mỗi nhóm quốc gia
  • Độ lệch chuẩn của các chỉ số Gini
  • Tỷ lệ thu nhập trung bình kiếm được từ 10% hàng đầu
  • Số năm mà chỉ số Gini lớn hơn 30
  • Độ lệch chuẩn của các giá trị chỉ số Gini trên 30
  • Phạm vi của các giá trị chỉ số Gini được báo cáo cho mỗi quốc gia.

Bài tập

  1. Tham khảo lại ví dụ về khí thải nhà kính vào đầu phần 6.4, trong đó chúng tôi tìm thấy 3 quốc gia hàng đầu về tăng trưởng phát thải trong lĩnh vực vận tải. a) Giải thích bằng lời những gì đang diễn ra trong mỗi dòng. b) Cố gắng tìm 3 quốc gia hàng đầu về mặt khí thải vào năm 2012 - danh sách khác nhau như thế nào?

  2. Khám phá tài liệu DPPLYR, bắt đầu với họa tiết giới thiệu, được truy cập bằng cách nhập

    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    59.dplyr’s documentation, starting with the introductory vignette, accessed by entering
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    59.

  3. Kiểm tra thêm dplyr ‘động từ trên bộ dữ liệu

    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    55. (Có thể phát hiện thêm tên họa tiết bằng cách nhập
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    61.)dplyr ‘verbs’ on the
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    55 dataset. (More vignette names can be discovered by typing
    library("tibble")
    tibble(x = 1:3, y = c("A", "B", "C"))
    #> # A tibble: 3 x 2
    #>       x y    
    #>    
    #> 1     1 A    
    #> 2     2 B    
    #> 3     3 C
    61.)

Đánh giá không tiêu chuẩn

Điều cuối cùng để nói về DPPLYR không liên quan đến dữ liệu mà là cú pháp của các chức năng. Lưu ý rằng nhiều đối số trong các ví dụ mã trong phần này được cung cấp dưới dạng tên thô: chúng là tên biến thô, không được bao quanh bởi các dấu ngoặc kép (ví dụ: & nbsp; ________ 118 thay vì

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
63). Điều này được gọi là đánh giá không chuẩn (NSE) (xem
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
64). NSE đã được sử dụng có chủ ý, với mục đích làm cho các chức năng hiệu quả hơn cho việc sử dụng tương tác. NSE giảm gõ và cho phép tự động hoàn thành trong rstudio.dplyr does not relate to the data but the syntax of the functions. Note that many of the arguments in the code examples in this section are provided as raw names: they are raw variable names, not surrounded by quote marks (e.g. 
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
18 rather than
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
63). This is called non-standard evaluation (NSE) (see
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
64). NSE was used deliberately, with the aim of making the functions more efficient for interactive use. NSE reduces typing and allows autocompletion in RStudio.

Điều này là tốt khi sử dụng R tương tác. Nhưng khi bạn muốn sử dụng R không liên quan, mã thường mạnh mẽ hơn khi sử dụng đánh giá tiêu chuẩn: nó giảm thiểu cơ hội tạo các lỗi liên quan đến phạm vi tối nghĩa. Sử dụng đánh giá thường trực cũng tránh phải khai báo các biến toàn cầu nếu bạn đưa mã vào gói. Để khắc phục điều này, khái niệm đánh giá gọn gàng đã được phát triển và thực hiện trong gói RLANG (một phần của Tidyverse) để cung cấp các chức năng để kiểm soát khi các ký hiệu được đánh giá và khi chúng được coi là chuỗi văn bản. Không đi sâu vào chi tiết, mã bên dưới cho thấy cách đánh giá gọn gàng hoạt động (xem họa tiết

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
65 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
66 để biết thêm thông tin):rlang (part of the tidyverse) to provide functions to control when symbols are evaluated and when they are treated as text strings. Without going into detail, the code below demonstrates how tidy evaluation works (see the
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
65 vignette and
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
66 for further information):

df_base = data.frame(colA = "A")
7

Kết hợp bộ dữ liệu

Tính hữu ích của một bộ dữ liệu đôi khi có thể được tăng cường đáng kể bằng cách kết hợp nó với dữ liệu khác. Ví dụ, nếu chúng ta có thể hợp nhất bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 toàn cầu với dữ liệu địa lý, chúng ta có thể hình dung sự phân phối không gian của ô nhiễm khí hậu. Đối với các mục đích của phần này, chúng tôi tham gia
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 vào dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69 do GGMAP cung cấp để minh họa các khái niệm và phương pháp tham gia dữ liệu (còn được gọi là hợp nhất).ggmap to illustrate the concepts and methods of data joining (also referred to as merging).

df_base = data.frame(colA = "A")
8

So sánh trực quan bộ dữ liệu mới này của

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69 với
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 (ví dụ: & nbsp; thông qua
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
72). Rõ ràng là cột
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
73 trong cái trước chứa thông tin giống như
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
18 trong phần sau. Đây sẽ là biến tham gia; Đổi tên nó trong
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69 sẽ làm cho việc tham gia hiệu quả hơn.

df_base = data.frame(colA = "A")
9

Đảm bảo rằng cả hai biến tham gia đều có cùng một lớp (kết hợp các cột

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
76 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
77 có thể gây ra sự tàn phá).

Sự chồng chéo giữa

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
78 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
79 lớn đến mức nào? Chúng ta có thể tìm hiểu bằng cách sử dụng toán tử
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
80, tìm ra có bao nhiêu phần tử trong một vectơ khớp với các vectơ khác. Cụ thể, chúng tôi sẽ tìm ra có bao nhiêu tên quốc gia duy nhất từ ​​
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 có trong bộ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69:

print(df_base)
df_base$colA
df_base$col
df_base$colB
0

Bài tập so sánh này đã có kết quả: Hầu hết các quốc gia trong bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
83 tồn tại trong bộ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69. Nhưng những gì về 20 tên quốc gia không phù hợp? Chúng ta có thể xác định những điều này như sau:

print(df_base)
df_base$colA
df_base$col
df_base$colB
1

Rõ ràng từ đầu ra rằng một số không phù hợp (ví dụ: & nbsp; Liên minh châu Âu) hoàn toàn không phải là quốc gia. Tuy nhiên, những người khác, chẳng hạn như ‘Gambia, người và Hoa Kỳ rõ ràng nên có các trận đấu. Kết hợp mờ có thể giúp tìm thấy những quốc gia nào phù hợp, như được minh họa với quốc gia không phù hợp đầu tiên dưới đây:

print(df_base)
df_base$colA
df_base$col
df_base$colB
2

Điều gì vừa xảy ra? Chúng tôi đã xác minh rằng quốc gia chưa từng có đầu tiên trong bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 không nằm trong tên quốc gia
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69. Vì vậy, chúng tôi đã sử dụng
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
87 mạnh hơn để tìm kiếm các trận đấu mờ (với đối số
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
88 được đặt thành
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
89. Kết quả cho thấy quốc gia
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
90 từ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53 phù hợp với hai quốc gia trong bộ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69. tham gia để phù hợp:

print(df_base)
df_base$colA
df_base$col
df_base$colB
3

Mã trên làm giảm số lượng tên quốc gia trong bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69 bằng cách thay thế cả hai Antigua Hồi và Barbuda Hồi thành Hồi Antigua & Barbuda. Điều này sẽ không hoạt động theo cách khác xung quanh: Làm thế nào người ta biết có nên thay đổi chương trình Antigua & Barbuda, thành một cách khác, hay đối với Barbuda hay.

Do đó, sự kết hợp mờ nhạt vẫn là một quá trình tốn nhiều công sức phải được bổ sung bởi sự phán đoán của con người. Một con người phải biết chắc chắn rằng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
94 được biểu diễn dưới dạng
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
95 trong bộ dữ liệu
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
69, mà không có rủi ro phù hợp sai thông qua
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
87.

Làm việc với cơ sở dữ liệu

Thay vì tải tất cả dữ liệu vào RAM, như R, cơ sở dữ liệu dữ liệu từ đĩa cứng. Điều này có thể cho phép một tập hợp con của một bộ dữ liệu rất lớn được xác định và đọc thành R nhanh chóng, mà không phải tải nó trước. R có thể kết nối với cơ sở dữ liệu theo một số cách, được chạm vào ngắn gọn bên dưới. Cơ sở dữ liệu là một lĩnh vực chủ đề lớn trải qua quá trình tiến hóa nhanh chóng. Thay vì nhằm mục đích bảo hiểm toàn diện, chúng tôi sẽ cung cấp các gợi ý cho các phát triển cho phép truy cập hiệu quả vào một loạt các loại cơ sở dữ liệu. Có thể tìm thấy lịch sử cập nhật của các giao diện R, đến cơ sở dữ liệu trong readme của gói DBI, cung cấp một giao diện chung và tập hợp các lớp cho các gói trình điều khiển (như rsqlite).DBI package, which provides a common interface and set of classes for driver packages (such as RSQLite).

RODBC là một gói kỳ cựu để truy vấn cơ sở dữ liệu bên ngoài từ bên trong R, sử dụng API kết nối cơ sở dữ liệu mở (ODBC). Chức năng của Rodbc được mô tả trong gói Vignette của gói (xem

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
98) và ngày nay sử dụng chính của nó là cung cấp giao diện R cho cơ sở dữ liệu SQL Server thiếu giao diện DBI. is a veteran package for querying external databases from within R, using the Open Database Connectivity (ODBC) API. The functionality of RODBC is described in the package’s vignette (see
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
98) and nowadays its main use is to provide an R interface to SQL Server databases which lack a DBI interface.

Gói DBI là một khung thống nhất để truy cập cơ sở dữ liệu cho phép các trình điều khiển khác được thêm vào dưới dạng các gói mô -đun. Do đó, các gói mới xây dựng trên DBI có thể được xem một phần như là sự thay thế của Rodbc (RMYSQL, RPostgresQL và RSQLite) (xem

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
99 để biết thêm về cách trình điều khiển DBI hoạt động). Bởi vì cú pháp DBI áp dụng cho một loạt các loại cơ sở dữ liệu, chúng tôi sử dụng nó ở đây với một ví dụ hoạt động.DBI package is a unified framework for accessing databases allowing for other drivers to be added as modular packages. Thus new packages that build on DBI can be seen partly as a replacement of RODBC (RMySQL, RPostgreSQL, and RSQLite) (see
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
99 for more on how DBI drivers work). Because the DBI syntax applies to a wide range of database types we use it here with a worked example.

print(df_base)
df_base$colA
df_base$col
df_base$colB
4

Hãy tưởng tượng bạn có quyền truy cập vào cơ sở dữ liệu chứa bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
53.

print(df_base)
df_base$colA
df_base$col
df_base$colB
5

Đoạn mã trên cho thấy cách hàm

df_base = data.frame(colA = "A")
01 kết nối với cơ sở dữ liệu bên ngoài, trong trường hợp này là cơ sở dữ liệu SQLite. Các đối số
df_base = data.frame(colA = "A")
02 và
df_base = data.frame(colA = "A")
03 được sử dụng để thiết lập kết nối. Tiếp theo, chúng tôi truy vấn các bảng nào có sẵn với
df_base = data.frame(colA = "A")
04, truy vấn cơ sở dữ liệu (mà không trích xuất kết quả thành R) với
df_base = data.frame(colA = "A")
05 và cuối cùng, tải kết quả vào R với
df_base = data.frame(colA = "A")
06.

Hãy chắc chắn không bao giờ phát hành mật khẩu của bạn bằng cách nhập trực tiếp vào lệnh. Thay vào đó, chúng tôi khuyên bạn nên lưu thông tin nhạy cảm như mật khẩu cơ sở dữ liệu và khóa API trong

df_base = data.frame(colA = "A")
07, được mô tả trong Chương 2. Giả sử bạn đã lưu mật khẩu của mình dưới dạng biến môi trường
df_base = data.frame(colA = "A")
08 Mã hoặc lịch sử phiên của bạn.

Gần đây, đã có một sự thay đổi theo cách tiếp cận ‘NoQuery, để lưu trữ các bộ dữ liệu lớn. Điều này được minh họa bằng sự xuất hiện và sự hấp thu của phần mềm như MongoDB và Apache Cassandra, có giao diện R thông qua các gói Mông Cổ và RJDBC, có thể kết nối với các cửa hàng dữ liệu Apache Cassandra và bất kỳ nguồn nào tuân thủ API kết nối cơ sở dữ liệu Java (JDBC).

MonetDB là một giải pháp thay thế gần đây cho các phương pháp quan hệ và NoQuery mang lại lợi thế hiệu quả đáng kể để xử lý các bộ dữ liệu lớn (Kersten et al. 2011). Một hướng dẫn trên trang web MonetDB cung cấp một giới thiệu tuyệt vời về cơ sở dữ liệu xử lý từ bên trong R.(Kersten et al. 2011). A tutorial on the MonetDB website provides an excellent introduction to handling databases from within R.

Có nhiều cân nhắc rộng hơn liên quan đến cơ sở dữ liệu mà chúng tôi sẽ không bao gồm ở đây: ai sẽ quản lý và duy trì cơ sở dữ liệu? Làm thế nào nó sẽ được sao lưu tại địa phương (các bản sao cục bộ nên được lưu trữ để giảm sự phụ thuộc vào mạng)? Cơ sở dữ liệu thích hợp cho dự án của bạn là gì. Những vấn đề này có thể có ý nghĩa lớn đối với hiệu quả, đặc biệt là trên các dự án lớn, dữ liệu. Tuy nhiên, chúng tôi sẽ không bao gồm chúng ở đây vì đây là một lĩnh vực di chuyển nhanh. Thay vào đó, chúng tôi hướng người đọc quan tâm đến các tài nguyên tiếp theo về chủ đề này, bao gồm:

  • Trang web cho Sparklyr, một gói gần đây để giao tiếp hiệu quả với Apache Spark Stack.sparklyr, a recent package for efficiently interfacing with the Apache Spark stack.
  • db-engines.com/en/: một trang web so sánh giá trị tương đối của các cơ sở dữ liệu khác nhau.
  • Các họa tiết
    df_base = data.frame(colA = "A")
    10 từ gói DPPLYR.dplyr package.
  • Bắt đầu với MongoDB trong R, một họa tiết giới thiệu trên cơ sở dữ liệu phi quan hệ và giảm MAP từ gói Mongolite.mongolite package.

Cơ sở dữ liệu và dplyrdplyr

Để truy cập cơ sở dữ liệu trong r qua DPPLER, người ta phải sử dụng một trong các hàm

df_base = data.frame(colA = "A")
11 để tạo nguồn. Tiếp tục với ví dụ SQLite ở trên, người ta sẽ tạo ra một đối tượng
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
8, có thể được DPPLE truy vấn như sau:dplyr, one must use one of the
df_base = data.frame(colA = "A")
11 functions to create a source. Continuing with the SQLite example above, one would create a
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
8 object, that can be queried by dplyr as follows:

print(df_base)
df_base$colA
df_base$col
df_base$colB
6

Đối tượng

df_base = data.frame(colA = "A")
13 sau đó có thể được truy vấn theo cách tương tự với khung dữ liệu tiêu chuẩn. Ví dụ: giả sử chúng tôi muốn lọc theo
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
18. Sau đó, chúng tôi sử dụng chức năng
df_base = data.frame(colA = "A")
15 như trước:

print(df_base)
df_base$colA
df_base$col
df_base$colB
7

Trong mã trên, DPPLYR đã thực sự tạo ra lệnh SQL cần thiết, có thể được kiểm tra bằng

df_base = data.frame(colA = "A")
16. Khi làm việc với cơ sở dữ liệu, DPPLYR sử dụng đánh giá lười biếng: dữ liệu chỉ được tìm nạp vào giây phút cuối cùng khi nó cần. Lệnh SQL được liên kết với
df_base = data.frame(colA = "A")
17 vẫn chưa được thực thi, đây là lý do tại sao
df_base = data.frame(colA = "A")
18 không hoạt động. Bằng cách sử dụng đánh giá lười biếng, DPPLYR hiệu quả hơn trong việc xử lý các cấu trúc dữ liệu lớn vì nó tránh được việc sao chép không cần thiết. Khi bạn muốn lệnh SQL của mình được thực thi, hãy sử dụng
df_base = data.frame(colA = "A")
19.dplyr has actually generated the necessary SQL command, which can be examined using
df_base = data.frame(colA = "A")
16. When working with databases, dplyr uses lazy evaluation: the data is only fetched at the last moment when it’s needed. The SQL command associated with
df_base = data.frame(colA = "A")
17 hasn’t yet been executed, this is why
df_base = data.frame(colA = "A")
18 doesn’t work. By using lazy evaluation, dplyr is more efficient at handling large data structures since it avoids unnecessary copying. When you want your SQL command to be executed, use
df_base = data.frame(colA = "A")
19.

Giai đoạn cuối cùng khi làm việc với cơ sở dữ liệu trong R là ngắt kết nối, ví dụ:

Bài tập

Thực hiện theo ví dụ hoạt động dưới đây để tạo và truy vấn cơ sở dữ liệu về giá đất ở Anh bằng cách sử dụng DPPLYR làm mặt trước của cơ sở dữ liệu SQLite. Giai đoạn đầu tiên là đọc dữ liệu:dplyr as a front end to an SQLite database. The first stage is to read-in the data:

print(df_base)
df_base$colA
df_base$col
df_base$colB
8

Giai đoạn tiếp theo là tạo cơ sở dữ liệu SQLite để giữ dữ liệu:

print(df_base)
df_base$colA
df_base$col
df_base$colB
9

Đối tượng mới

df_base = data.frame(colA = "A")
20 mới là lớp nào?

Tại sao chúng ta sử dụng đối số

df_base = data.frame(colA = "A")
21?

Từ mã trên, chúng ta có thể thấy rằng chúng ta đã tạo ra một

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
8. Điều này có thể được truy cập bằng cách sử dụng DPPLYR giống như bất kỳ khung dữ liệu nào có thể. Bây giờ chúng tôi có thể truy vấn dữ liệu. Bạn có thể sử dụng mã SQL để truy vấn trực tiếp cơ sở dữ liệu hoặc sử dụng các động từ DPPLY tiêu chuẩn trên bảng.dplyr in the same way as any data frame can. Now we can query the data. You can use SQL code to query the database directly or use standard dplyr verbs on the table.

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
0

Làm thế nào bạn sẽ thực hiện cùng một truy vấn bằng cách sử dụng

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
50? Hãy thử để xem bạn có nhận được kết quả tương tự không (Gợi ý: Sử dụng BackTicks cho tên biến
df_base = data.frame(colA = "A")
24).

Xử lý dữ liệu với dữ liệu. Có thể

Data.Table là một gói trưởng thành để xử lý dữ liệu nhanh trình bày một giải pháp thay thế cho DPPLYR. Có một số tranh cãi về việc phù hợp hơn cho các nhiệm vụ khác nhau.18, hiệu quả hơn ở một mức độ nào đó phụ thuộc vào sở thích cá nhân và những gì bạn đã quen. Cả hai đều là các gói mạnh mẽ và hiệu quả cần có thời gian để học, vì vậy tốt nhất là học một và gắn bó với nó, thay vì có tính hai mặt của việc sử dụng hai cho mục đích tương tự. Có những tình huống trong đó một người hoạt động tốt hơn một tình huống khác: DPPLY cung cấp giao diện nhất quán và linh hoạt hơn (ví dụ: & nbsp; với giao diện của nó với cơ sở dữ liệu, được thể hiện trong phần trước) vì vậy đối với hầu hết các mục đích, chúng tôi khuyên bạn nên học DPPLE trước nếu bạn không phải là cả hai gói. DPPLYR cũng có thể được sử dụng để làm việc với lớp

df_base = data.frame(colA = "A")
25 được sử dụng bởi gói dữ liệu. is a mature package for fast data processing that presents an alternative to dplyr. There is some controversy about which is more appropriate for different tasks.18 Which is more efficient to some extent depends on personal preferences and what you are used to. Both are powerful and efficient packages that take time to learn, so it is best to learn one and stick with it, rather than have the duality of using two for similar purposes. There are situations in which one works better than another: dplyr provides a more consistent and flexible interface (e.g. with its interface to databases, demonstrated in the previous section) so for most purposes we recommend learning dplyr first if you are new to both packages. dplyr can also be used to work with the
df_base = data.frame(colA = "A")
25 class used by the data.table package so you can get the best of both worlds.

Data.Table nhanh hơn DPPLYR cho một số hoạt động và cung cấp một số chức năng không có sẵn trong các gói khác, hơn nữa, nó có một cộng đồng người dùng trưởng thành và tiên tiến. Data.Table hỗ trợ các lần nối cuộn (cho phép các hàng trong một bảng được chọn dựa trên sự gần gũi giữa các biến được chia sẻ (thường là thời gian) và các kết nối không cân bằng (trong đó các tiêu chí tham gia có thể là bất bình đẳng thay vì bằng). is faster than dplyr for some operations and offers some functionality unavailable in other packages, moreover it has a mature and advanced user community. data.table supports rolling joins (which allow rows in one table to be selected based on proximity between shared variables (typically time) and non-equi joins (where join criteria can be inequalities rather than equal to).

Phần này cung cấp một vài ví dụ để minh họa cách dữ liệu. Có thể khác nhau và (có nguy cơ gây ra cuộc tranh luận thêm) một số điểm chuẩn để khám phá hiệu quả hơn. Như được nhấn mạnh trong suốt cuốn sách, việc viết mã hiệu quả thường quan trọng hơn việc thực hiện hiệu quả trong nhiều nhiệm vụ hàng ngày, vì vậy ở một mức độ nào đó, nó là một vấn đề ưu tiên.data.table differs and (at the risk of inflaming the debate further) some benchmarks to explore which is more efficient. As emphasised throughout the book, efficient code writing is often more important than efficient execution on many everyday tasks so to some extent it’s a matter of preference.

Lớp đối tượng nền tảng của dữ liệu. Có thể là

df_base = data.frame(colA = "A")
25. Giống như DPPLYRTHER
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5, các đối tượng Data.Table, ____2225 hoạt động giống như lớp
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6 cơ sở. Tuy nhiên, mô hình dữ liệu.Table có một số tính năng độc đáo giúp nó hiệu quả về mặt tính toán cao đối với nhiều tác vụ phổ biến trong phân tích dữ liệu. Dựa trên các phương pháp tập hợp con bằng cách sử dụng
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
36 và
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34, đã đề cập trước đây, chúng tôi sẽ thấy Data.Tables Phương pháp tiếp cận duy nhất để tập hợp con. Giống như cơ sở r data.Table sử dụng dấu ngoặc vuông nhưng (không giống như cơ sở r nhưng như dplyr) sử dụng đánh giá không chuẩn để bạn không cần tham khảo tên đối tượng bên trong dấu ngoặc:data.table is the
df_base = data.frame(colA = "A")
25. Like dplyr’s
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
5, data.table’s
df_base = data.frame(colA = "A")
25 objects behave in the same was as the base
library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
6 class. However the data.table paradigm has some unique features that make it highly computationally efficient for many common tasks in data analysis. Building on subsetting methods using
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
36 and
library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
34, mentioned previously, we’ll see data.tables’s unique approach to subsetting. Like base R data.table uses square brackets but (unlike base R but like dplyr) uses non-standard evaluation so you need not refer to the object name inside the brackets:

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
1

Lưu ý rằng các dấu ngoặc vuông không cần dấu phẩy để chỉ các hàng với các đối tượng

df_base = data.frame(colA = "A")
25: Trong cơ sở r, bạn sẽ viết
df_base = data.frame(colA = "A")
33.

Để tăng hiệu suất, người ta có thể đặt ‘phím, tương tự như các khóa chính trong cơ sở dữ liệu. Đây là ‘rownames siêu tăng áp, đặt bảng dựa trên một hoặc nhiều biến. Điều này cho phép thuật toán tìm kiếm nhị phân để tập hợp các hàng quan tâm, nhanh hơn nhiều so với phương pháp quét vector được sử dụng trong cơ sở R (xem

df_base = data.frame(colA = "A")
34). Data.Table sử dụng các giá trị khóa để tập hợp theo mặc định để biến không cần được đề cập lại. Thay vào đó, sử dụng các khóa, tiêu chí tìm kiếm được cung cấp làm danh sách (được gọi bên dưới với cú pháp
df_base = data.frame(colA = "A")
35 ngắn gọn, đồng nghĩa với
df_base = data.frame(colA = "A")
36).data.table uses the key values for subsetting by default so the variable does not need to be mentioned again. Instead, using keys, the search criteria is provided as a list (invoked below with the concise
df_base = data.frame(colA = "A")
35 syntax, which is synonymous with
df_base = data.frame(colA = "A")
36).

library("efficient")
data(pew) # see ?pew - dataset from the efficient package
pew[1:3, 1:4] # take a look at the data
#> # A tibble: 3 x 4
#>   religion `<$10k` `$10--20k` `$20--30k`
#>                     
#> 1 Agnostic      27         34         60
#> 2 Atheist       12         27         37
#> 3 Buddhist      27         21         30
2

Kết quả là như nhau, vậy tại sao thêm giai đoạn bổ sung của việc thiết lập khóa? Lý do là hoạt động sắp xếp một lần này có thể dẫn đến mức tăng hiệu suất đáng kể trong các tình huống liên tục tập hợp các hàng trên các bộ dữ liệu lớn tiêu thụ một tỷ lệ lớn thời gian tính toán trong quy trình làm việc của bạn. Điều này được minh họa trong Hình 6.1, so sánh 4 phương pháp tập hợp các phiên bản lớn hơn của bộ dữ liệu

library("tibble")
tibble(x = 1:3, y = c("A", "B", "C"))
#> # A tibble: 3 x 2
#>       x y    
#>    
#> 1     1 A    
#> 2     2 B    
#> 3     3 C
55.

5 album r & b hàng đầu mọi thời đại năm 2022

Hình 6.1: Điểm chuẩn minh họa các mức tăng hiệu suất được mong đợi cho các kích thước dữ liệu khác nhau.

Hình 6.1 chứng minh rằng dữ liệu. Có thể nhanh hơn nhiều so với cơ sở r và dplyr khi tập hợp con. Như với việc sử dụng các gói bên ngoài để đọc trong dữ liệu (xem Phần 5.3), lợi ích tương đối của dữ liệu. Có thể cải thiện với kích thước bộ dữ liệu, tiếp cận cải tiến ~ 70 lần trên cơ sở R và cải tiến gấp 50 lần trên DPPLY khi kích thước bộ dữ liệu đạt nửa một gigabyte. Điều thú vị là, ngay cả việc triển khai ‘không khóa của phương thức tập hợp dữ liệu. Quá trình tạo các tài khoản khóa cho tốc độ tăng tốc ~ 10 lần trong trường hợp khóa đã được tạo sẵn.data.table is much faster than base R and dplyr at subsetting. As with using external packages to read in data (see Section 5.3), the relative benefits of data.table improve with dataset size, approaching a ~70 fold improvement on base R and a ~50 fold improvement on dplyr as the dataset size reaches half a Gigabyte. Interestingly, even the ‘non key’ implementation of data.table subset method is faster than the alternatives: this is because data.table creates a key internally by default before subsetting. The process of creating the key accounts for the ~10 fold speed-up in cases where the key has been pre-generated.

Phần này đã giới thiệu dữ liệu. Có thể là một cách tiếp cận miễn phí cho các phương thức cơ sở và DPPLYR để xử lý dữ liệu. Nó cung cấp mức tăng hiệu suất do thực hiện C trong C và sử dụng các phím cho các bảng tập hợp. Dữ liệu.Table cung cấp nhiều hơn, tuy nhiên, bao gồm: định hình lại dữ liệu hiệu quả cao; Hợp nhất bộ dữ liệu (còn được gọi là tham gia, như với

df_base = data.frame(colA = "A")
38 trong dplyr); và nhóm. Để biết thêm thông tin về dữ liệu. Có thể, chúng tôi khuyên bạn nên đọc gói Vignette
df_base = data.frame(colA = "A")
39,
df_base = data.frame(colA = "A")
40 và
df_base = data.frame(colA = "A")
41.data.table as a complimentary approach to base and dplyr methods for data processing. It offers performance gains due to its implementation in C and use of keys for subsetting tables. data.table offers much more, however, including: highly efficient data reshaping; dataset merging (also known as joining, as with
df_base = data.frame(colA = "A")
38 in dplyr); and grouping. For further information on data.table, we recommend reading the package’s
df_base = data.frame(colA = "A")
39,
df_base = data.frame(colA = "A")
40 and
df_base = data.frame(colA = "A")
41 vignettes.

Người giới thiệu

Codd, E. F. 1979. Mở rộng mô hình quan hệ cơ sở dữ liệu để nắm bắt nhiều ý nghĩa hơn. Giao dịch ACM trên hệ thống cơ sở dữ liệu 4 (4): 397 Từ434. https://doi.org/10.1145/320107.320109.

Grolemund, G. và H. Wickham. 2016. R cho khoa học dữ liệu. Phương tiện truyền thông O hèReilly.

Kersten, Martin L, Stratos Idreos, Stefan Manegold, Erietta Liarou và những người khác. 2011. Hướng dẫn của nhà nghiên cứu về dữ liệu Deluge: Truy vấn cơ sở dữ liệu khoa học chỉ trong vài giây. PVLDB thách thức và tầm nhìn 3.

Spector, Phil. 2008 Thao tác dữ liệu với R. Springer Science & Business Media.

Wickham, Hadley. 2010. Chuỗi Stringr: Xử lý chuỗi hiện đại, nhất quán. Tạp chí R 2 (2): 38 trận40.

Wickham, Hadley. 2014b. Dữ liệu gọn gàng. Tạp chí Phần mềm thống kê 14 (5).

Làm thế nào để bạn nhận được 5 giá trị hàng đầu trong r?

Để có được các giá trị hàng đầu trong khung dữ liệu R, chúng ta có thể sử dụng hàm đầu và nếu chúng ta muốn các giá trị theo thứ tự giảm thì sẽ được yêu cầu chức năng sắp xếp.Do đó, chúng ta cần sử dụng kết hợp hàm đầu và sắp xếp để tìm các giá trị hàng đầu theo thứ tự giảm.use the head function and if we want the values in decreasing order then sort function will be required. Therefore, we need to use the combination of head and sort function to find the top values in decreasing order.

Làm cách nào để chọn 10 hàng top trong r?

Giả sử, bạn muốn chọn 10 hàng đầu tiên.Cách dễ nhất để làm điều đó là dữ liệu [1:10,].data[1:10, ] .

Làm thế nào để bạn hiển thị giá trị cao nhất trong r?

Giá trị tối đa của một cột trong r có thể được tính bằng cách sử dụng hàm tối đa ().Hàm Max () lấy tên cột làm đối số và tính toán giá trị tối đa của cột đó.max() function. Max() Function takes column name as argument and calculates the maximum value of that column.

Làm thế nào để tôi sắp xếp trong r?

Để sắp xếp khung dữ liệu trong r, hãy sử dụng hàm thứ tự ().Theo mặc định, việc sắp xếp là tăng dần.Phép cho biến sắp xếp theo dấu trừ để chỉ ra thứ tự giảm dần.use the order( ) function. By default, sorting is ASCENDING. Prepend the sorting variable by a minus sign to indicate DESCENDING order.