繁体   English   中英

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

[英]Trying to get rid of commas in numbers with regex in R gives strange output

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

> withCommas   
Source: local data frame [326 x 1]

             NA
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 
..          ... 

Classes ‘tbl_df’ and 'data.frame':  326 obs. of  1 variable:
 $ : Factor w/ 207 levels ""," 1,008 "," 1,129 ",..: 40 178 143 100 66 63 61 58 57 16 ...

我试图摆脱逗号(因此第一行应为16244600)。 所以我尝试了以下方法:

#1st try
noCommas <- gsub("([0-9]+)\\,([0-9])", "\\1\\2", withCommas)
#2nd try
noCommas <- gsub(",", "", withCommas)

在所有情况下,我都得到以下输出:

[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)"

我觉得这很奇怪,因为我不知道这些数字是从哪里来的。 任何帮助表示赞赏。

编辑:只有withCommas变量的前225行才有值。 之后,该列的值为空。

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

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

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

那这个解决方案呢? 我认为出现主要问题是因为数据框是一个列表,而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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM