Как удалить часть строки и преобразовать число - PullRequest
0 голосов
/ 12 декабря 2018

Я довольно новичок в R и у меня проблема с фреймом данных.

Итак, у меня есть dataframe dataf, который выглядит так:

#         PlayerName           playerValue
#5     Tammy Abraham          10,00 Mill. €  
#6     Abdul Rahman Baba      8,00 Mill. €  
#7     Mario Pasalic          8,00 Mill. €  
#8     Lewis Baker            5,50 Mill. €  
#9     Ola Aina               4,00 Mill. €  
#10    Jamal Blackman         500 Th. €  

Затем я используюстрока:

dataf$playerValue <- gsub(",", ".", gsub("[[:space:]].*", "", dataf$PlayerValue))

Вывод этого:

#         PlayerName           playerValue        playerValue
#5     Tammy Abraham          10,00 Mill. €           10
#6     Abdul Rahman Baba      8,00 Mill. €            8
#7     Mario Pasalic          8,00 Mill. €            8
#8     Lewis Baker            5,50 Mill. €            5.5
#9     Ola Aina               4,00 Mill. €            4
#10    Jamal Blackman         500 Th. €               500

Есть ли еще способ сделать окончательное значение от 500 до .5?Потому что очевидно, что 500 тысяч меньше 4 миллионов, но здесь int 500 будет больше 4.

Кроме того, как мне просто исключить исходный столбец PlayerValue?Когда я запускаю свой код, он печатает столбец дважды, один раз со строкой в ​​конце и преобразованным столбцом.

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Вот идея, где он извлекает значения из каждой строки, и если слово Mill не найдено в строке, оно делится на 1000, т. Е.

Предполагается, что фрейм данных

 playerName         playerValue
1  Tammy Abraham    10,00 Mill. €
2 Jamal Blackman    500 Th. €

затем,

v1 <- as.numeric(gsub('\\D+', '', gsub(',.*', '', df$playerValue)))
v1[!grepl('Mill', df$playerValue)] <- v1[!grepl('Mill', df$playerValue)] / 1000
v1
#[1] 10.0  0.5

Вот очень похожий вопрос хотя и не совсем такой же

0 голосов
/ 12 декабря 2018

Здесь простой ответ с использованием strsplit и ifelse .

# Dummy data
df <- data.frame(playerValue = c("500 Th. € ","4,00 Mill. € "), stringsAsFactors = FALSE)

# Splitting number and scale into two columns
splits <- strsplit(df$playerValue, split = " ")
splits <- do.call(rbind, splits)

# Replacing commas
splits[,1] <- gsub(",", ".", splits[,1])

# Adding to dataframe
df$value <- as.numeric(splits[,1])
df$scale <- splits[,2]

# Calculating new values
df$new_value <- ifelse(df$scale == "Th.", df$value/1000, df$value)
0 голосов
/ 12 декабря 2018

Вы можете использовать regex для разделения миллионов / тысяч при извлечении чисел.

# dummy data
dataf <- data.frame(playerValue = c("500 Th. € ","4,00 Mill. € "))
# Extract with regex
mils <- 10^3 * as.numeric(gsub("^(\\d+?)\\,(\\d+?)\\s.*|^(\\d+?)\\s.*", "\\1", 
                               dataf$playerValue, perl = TRUE))
thsd <- as.numeric(gsub("^(\\d+?)\\,(\\d+?)\\s.*|^(\\d+?)\\s.*", "\\2\\3", 
                   dataf$playerValue, perl = TRUE))
# Final result
rowSums(cbind(mils, thsd), na.rm = TRUE)
# returns
[1]  500 4000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...