Tidy Data
Separating and Uniting
Separate a Column/Unite Two Columns
# unite latitude and longitude into one column, then separate them again
nuc_united <- nuclear %>%
select(id_no, country, latitude, longitude) %>%
unite(col = "location", c(latitude, longitude), sep = "/")
nuc_united
## # A tibble: 2,051 × 3
## id_no country location
## <dbl> <chr> <chr>
## 1 45001 USA 32.54/-105.57
## 2 45002 USA 34.23/132.27
## 3 45003 USA 32.45/129.52
## 4 46001 USA 11.35/165.2
## 5 46002 USA 11.35/165.2
## 6 48001 USA 11.3/162.15
## 7 48002 USA 11.3/162.15
## 8 48003 USA 11.3/162.15
## 9 49001 USSR 48/76
## 10 51001 USA 37/-116
## # ℹ 2,041 more rows
nuc_sep <- nuc_united %>%
separate(col = location, into = c("latitude", "longitude"),
sep = "/", convert = TRUE)
nuc_sep
## # A tibble: 2,051 × 4
## id_no country latitude longitude
## <dbl> <chr> <dbl> <dbl>
## 1 45001 USA 32.5 -106.
## 2 45002 USA 34.2 132.
## 3 45003 USA 32.4 130.
## 4 46001 USA 11.4 165.
## 5 46002 USA 11.4 165.
## 6 48001 USA 11.3 162.
## 7 48002 USA 11.3 162.
## 8 48003 USA 11.3 162.
## 9 49001 USSR 48 76
## 10 51001 USA 37 -116
## # ℹ 2,041 more rows
Missing Values
# pivot_wider creates NAs where a country had no explosions that year
nuc_wide
## # A tibble: 7 × 9
## country `1990` `1992` `1993` `1994` `1995` `1996` `1991` `1998`
## <chr> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 CHINA 2 2 1 2 2 2 NA NA
## 2 FRANCE 6 NA NA NA 5 1 6 NA
## 3 INDIA NA NA NA NA NA NA NA 2
## 4 PAKIST NA NA NA NA NA NA NA 2
## 5 UK 1 NA NA NA NA NA 1 NA
## 6 USA 8 6 NA NA NA NA 7 NA
## 7 USSR 1 NA NA NA NA NA NA NA
# complete() makes the missing country-year rows explicit
nuc_counts %>%
complete(country, year, fill = list(n = 0))
## # A tibble: 56 × 3
## country year n
## <chr> <dbl> <int>
## 1 CHINA 1990 2
## 2 CHINA 1991 0
## 3 CHINA 1992 2
## 4 CHINA 1993 1
## 5 CHINA 1994 2
## 6 CHINA 1995 2
## 7 CHINA 1996 2
## 8 CHINA 1998 0
## 9 FRANCE 1990 6
## 10 FRANCE 1991 6
## # ℹ 46 more rows
# fill() copies a value into the NAs around it
nuclear %>%
select(country, year, depth) %>%
arrange(country, year) %>%
fill(depth, .direction = "up")
## # A tibble: 2,051 × 3
## country year depth
## <chr> <dbl> <dbl>
## 1 CHINA 1964 0
## 2 CHINA 1965 0
## 3 CHINA 1966 0
## 4 CHINA 1966 0
## 5 CHINA 1966 0
## 6 CHINA 1967 0
## 7 CHINA 1967 0
## 8 CHINA 1968 0
## 9 CHINA 1969 0
## 10 CHINA 1969 0
## # ℹ 2,041 more rows
Non_Tidy Data