试图用R中的正则表达式去掉数字中的逗号会产生奇怪的输出

时间:2015-07-18 16:04:15

标签: regex r

我是R的新手。这是我的数据(使用dplyr):

[1] "c(40 178 143 100 66 63 61 58 57 16 14 11 9 6 4 182 176 174 170 161 148 147 139 137 136 134 118 117 116 114 113 109 107 105 95 93 92 90 89 88 87 84 83 78 75 74 73 72 71 70 56 55 49 47 43 42 39 28 25 24 23 190 188 181 172 165 163 162 160 153 152 151 150 149 146 145 144 138 132 131 130 129 128 127 126 125 124 115 112 111 110 106 98 97 96 94 86 85 82 81 80 77 76 69 68 54 52 51 50 46 45 44 41 \n38 37 36 35 34 33 32 31 30 29 27 26 22 21 20 19 18 17 187 186 185 184 183 179 177 169 168 167 166 159 158 157 156 155 142 141 140 122 121 120 119 104 103 102 101 99 67 65 64 62 60 59 15 13 12 10 8 7 5 3 2 189 180 175 173 173 171 164 154 135 133 108 91 79 53 48 123 1 191 191 191 191 191 1 191 191 191 191 191 191 191 191 191 191 191 191 191 191 191 191 191 191 1 206 1 205 200 202 198 201 196 \n195 204 194 199 193 203 197 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)"

我试图摆脱逗号(所以第一行应该是16244600)。所以我尝试了以下内容:

cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2

在所有情况下,我都得到了这个输出:

cordova.plugins.fileOpener2.open(
    '/sdcard/Download/starwars.pdf', // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
    'application/pdf', 
    { 
        error : function(e) { 
            console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
        },
        success : function () {
            console.log('file opened successfully');                
        }
    }
);

这对我来说似乎很奇怪,因为我不明白数字的来源。任何帮助表示赞赏。

修改 只有变量withCommas的前225行具有值。之后,列的值为空。

来源:http://data.worldbank.org/data-catalog/GDP-ranking-table

CSV:https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2FGDP.csv

2 个答案:

答案 0 :(得分:1)

data <- read.table(header=F, text="1   16,244,600 
2    8,227,103 
3    5,959,718 
4    3,428,131 
5    2,612,878 
6    2,471,784 
7    2,252,664 
8    2,014,775 
9    2,014,670 
10   1,841,710 ")
colnames(data) <- c("a","b")
data$b <- as.numeric(gsub(",", "", data$b))

输出:

    a        b
1   1 16244600
2   2  8227103
3   3  5959718
4   4  3428131
5   5  2612878
6   6  2471784
7   7  2252664
8   8  2014775
9   9  2014670
10 10  1841710

答案 1 :(得分:1)

这个解决方案怎么样?我认为主要问题出现是因为数据框是一个列表而gsub期望一个字符串,所以将它传递给该函数导致将函数应用于列表而不是列表本身的元素。这是apply功能的原因。或者当然,如果列是一列,则只将该列作为带有ddf$column_with_commas的向量传递,作为其他用户提供的解决方案。

 as.data.frame(apply(ddf, 2, function(x) as.numeric(gsub(",", "", x))))
        NA.
1  16244600
2   8227103
3   5959718
4   3428131
5   2612878
6   2471784
7   2252664
8   2014775
9   2014670
10  1841710

数据

ddf <- structure(list(NA. = structure(c(2L, 10L, 9L, 8L, 7L, 6L, 5L, 
4L, 3L, 1L), .Label = c("1,841,710", "16,244,600", "2,014,670", 
"2,014,775", "2,252,664", "2,471,784", "2,612,878", "3,428,131", 
"5,959,718", "8,227,103"), class = "factor")), .Names = "NA.", class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"))