17

I need to remove commas from a field in an R dataframe. Technically I have managed to do this, but the result seems to be neither a vector nor a matrix, and I cannot get it back into the dataframe in a usable format. So is there a way to remove the commas from a field, AND have that field remain part of the dataframe.

Here is a sample of the field that needs commas removed, and the results generated by my code:

> print(x['TOT_EMP'])
         TOT_EMP
1    132,588,810
2      6,542,950
3      2,278,260
4        248,760

> y
[1] "c(\"132588810\" \"6542950\" \"2278260\" \"248760\...)"

The desired result is a numeric field:

       TOT_EMP
1    132588810
2      6542950
3      2278260
4       248760

x<-read.csv("/home/mark/Desktop/national_M2013_dl.csv",header=TRUE,colClasses="character")
y=(gsub(",","",x['TOT_EMP']))
print(y)
VLAZ
  • 26,331
  • 9
  • 49
  • 67
mark stevenson
  • 173
  • 1
  • 1
  • 8

1 Answers1

32

gsub() will return a character vector, not a numeric vector (which is it sounds like you want). as.numeric() will convert the character vector back into a numeric vector:

> df <- data.frame(numbers = c("123,456,789", "1,234,567", "1,234", "1"))
> df
      numbers
1 123,456,789
2   1,234,567
3       1,234
4           1
> df$numbers <- as.numeric(gsub(",","",df$numbers))
> df
    numbers
1 123456789
2   1234567
3      1234
4         1

The result is still a data.frame:

> class(df)
[1] "data.frame"
Richard Border
  • 3,209
  • 16
  • 30
  • I tried using data.frame, but it didn't work, possibly because the vector elements were not comma delimited. Instead of a comma delimited vector such as c("123,456,789", "1,234,567", "1,234", "1"), I had "c(\"132588810\" \"6542950\" \"2278260\" \"248760\...)" which looks like it is tab delimited. – mark stevenson Jan 24 '15 at 20:18
  • This appears to be an entirely different question. Were the values of `x['TOT_EMP']` not what you started with? – Richard Border Jan 24 '15 at 20:33
  • What does `head(read.csv("/home/mark/Desktop/national_M2013_dl.csv"))` return? – Richard Border Jan 24 '15 at 20:39