在列(R)中删除一部分字符串

时间:2018-12-11 19:54:20

标签: r

我有dataf列的数据框PlayerValue

         PlayerName           playerValue
1     Michy Batshuayi        40,00 Mill. €  
2     Tiemoué Bakayoko       35,00 Mill. €  
3     Kurt Zouma             20,00 Mill. €  
4     Kenedy                 10,00 Mill. €  
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    Tomas Kalas            4,00 Mill. €  

我想让它只获得像这样的列中的数字(如果可能的话,用小数点替换逗号)

         PlayerName           playerValue
1     Michy Batshuayi           40,00 # 40.00, if possible
2     Tiemoué Bakayoko          35,00  
3     Kurt Zouma                20,00  
4     Kenedy                    10,00  
5     Tammy Abraham             10,00   
6     Abdul Rahman Baba         8,00   
7     Mario Pasalic             8,00  
8     Lewis Baker               5,50  
9     Ola Aina                  4,00   
10    Tomas Kalas               4,00   

2 个答案:

答案 0 :(得分:1)

使用gsub替换空格后的所有内容,并将,替换为.,如下所示:

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

它将为您提供以下输出:

#         PlayerName           playerValue
#1     Michy Batshuayi               40.00
#2     Tiemoué Bakayoko              35.00  
#3     Kurt Zouma                    20.00  
#4     Kenedy                        10.00  
#5     Tammy Abraham                 10.00   
#6     Abdul Rahman Baba              8.00   
#7     Mario Pasalic                  8.00  
#8     Lewis Baker                    5.50  
#9     Ola Aina                       4.00   
#10    Tomas Kalas                    4.00   

如果要将其转换为数字,则可以按以下步骤进行操作:

data$playerValue <- as.numeric(data$playerValue)

希望有帮助。

答案 1 :(得分:1)

这可以解决问题

playerValue <- "40,00 Mill. € "
as.numeric(gsub("^(\\d+?)\\,(\\d+?)\\s.*", "\\1.\\2", playerValue, perl = TRUE))
# returns
40

简短爆炸。 regex

  • ^告诉它是字符串的开头
  • \\d+\\,\\d+表示有两个数字序列,中间用逗号分隔。我们使用括号提取两个序列
  • \\s.*表示在第二个序列后出现空白并且该空间后出现了任何东西(什么也没有)
  • \\1\\2是我们要提取的分组,为了将其转换为numeric
  • ,我们将它们用点分隔。