как мне избавиться от знака in в моих данных - PullRequest
0 голосов
/ 04 ноября 2018

Мне отчаянно нужна твоя помощь. Я собрал некоторые данные из Википедии и наткнулся на этот знак. Сначала я подумал, что это просто | но это явно не так.

Большинство моих клеток выглядит так

table$Population
7004164110000000000¦16,411[7]
7007111260000000000¦11,126,000[13]

Я пытаюсь удалить все, кроме 16,411, но сначала мне нужно, как преобразовать его во что-то еще.

Любая помощь приветствуется, я сходил с ума, потому что, когда я попробовал функцию gsub, она не работала, а затем не работала и str_split_fixed ...

dput(tables$Population) дает

c("7007301655000000000¦30,165,500[6]", "7007241833000000000¦24,183,300[8]", "7007217070000000000¦21,707,000[10]", "7007150292310000000¦15,029,231[11]")

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вот еще один способ разбить эту таблицу на фрейм данных:

library(rvest)

pg <- read_html("https://en.wikipedia.org/wiki/List_of_cities_proper_by_population")

html_node(pg, "table.wikitable") %>% 
  html_table() %>% 
  dplyr::tbl_df() %>% 
  janitor::clean_names() %>% # THE LINE BELOW DOES THE MAGIC YOU ORIGINALLY ASKE FOR BUT IN A DIFFERENT WAY
  tidyr::separate(population, c("sortkey", "population"), sep="[^[:ascii:]]+") %>% 
  dplyr::mutate(
    population = gsub("\\[.*$", "", population)
  ) %>% 
  readr::type_convert()
## # A tibble: 87 x 9
##     rank city      image sortkey population definition                totalarea_km  populationdensi… country
##    <int> <chr>     <lgl>   <dbl>      <dbl> <chr>                     <chr>                    <dbl> <chr>  
##  1     1 Chongqing NA    7.01e18  30165500. Municipality              700482403000…             366. China  
##  2     2 Shanghai  NA    7.01e18  24183300. Municipality              700363405000…            3814. China  
##  3     3 Beijing   NA    7.01e18  21707000. Municipality              700416411000…            1267. China  
##  4     4 Istanbul  NA    7.01e18  15029231. Metropolitan municipality 700262029000…           24231. Turkey 
##  5     5 Karachi   NA    7.01e18  14910352. City[14]                  700337800000…            3944. Pakist…
##  6     6 Dhaka     NA    7.01e18  14399000. City                      700233754000…           42659. Bangla…
##  7     7 Guangzhou NA    7.01e18  13081000. City (sub-provincial)     700374340000…            1760. China  
##  8     8 Shenzhen  NA    7.01e18  12528300. City (sub-provincial)     700319920000…            6889. China  
##  9     9 Mumbai    NA    7.01e18  12442373. City[21]                  700243771000…           28426. India  
## 10    10 Moscow    NA    7.01e18  13200000. Federal city[24][25]      2 511[26]                5256. Russia 
## # ... with 77 more rows

Таблица использует следующую базовую разметку для строк:

enter image description here

Ячейки "популяции" в конечном итоге выглядят так, как в необработанном векторе R (это первый, 30 == пробел для предоставления ссылки на визуальный маркер):

## [1] 37 30 30 37 33 30 31 36 35 35 30 30 30 30 30 30 30 30 30 e2 99 a0 33 30 2c 31 36 35 2c 35 30 30 5b 36 5d

Что больше похоже на встраивание Юникода. Поскольку это «не ASCII», мы можем использовать это в наших интересах для обработки данных.

0 голосов
/ 04 ноября 2018

Вам нужно сбежать с \\

test <- "7004164110000000000¦16,411"
gsub("\\¦", "", test)
[1] "700416411000000000016,411"

РЕДАКТИРОВАТЬ: Да, это работает и для столбца:

> gsub("\\¦","",c("7007301655000000000¦30,165,500[6]", "7007241833000000000¦24,183,300[8]", "7007217070000000000¦21,707,000[10]", "7007150292310000000¦15,029,231[11]"))
[1] "700730165500000000030,165,500[6]"  "700724183300000000024,183,300[8]" 
[3] "700721707000000000021,707,000[10]" "700715029231000000015,029,231[11]"

РЕДАКТИРОВАТЬ 2: заменив символ в соответствии с предложением @hrbrmstr, для вас должно работать следующее:

stringr::str_replace(c("7007301655000000000¦30,165,500[6]", "7007241833000000000¦24,183,300[8]", "7007217070000000000¦21,707,000[10]", "7007150292310000000¦15,029,231[11]"),
+                      "[^[:ascii:]]+","")
[1] "700730165500000000030,165,500[6]"  "700724183300000000024,183,300[8]" 
[3] "700721707000000000021,707,000[10]" "700715029231000000015,029,231[11]"
...