Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R: Converting data frame of percentages from factor to numeric

Tags:

r

Running into issues converting a data frame into R.

I have a bunch of columns that were read as factors and have % symbols with them.

I know that for a single column I could do:

df[,3] <- as.numeric(sub("%","",df[,3]))

But trying to apply this to the whole dataset does not seem to work and changes all the values to NA. What am I doing wrong? Here is the code I tried to use:

df[,-1] <- as.numeric(sub("%","",df[,-1]))

EDIT: I know I can solve this with:

for (i in 2:66) {
df[,i] <- as.numeric(sub("%","",df[,i]))
print(class(df[,i]))
}

But there has to be a more elegant (and hopefully one-line) way to do this.

EDIT 2: Here is some of the data:

    Year        v1      v2       v3       v4
1 12-Oct        0%      0%      39%      14%
2 12-Nov        0%      6%      59%       4%
3 12-Dec       22%      0%      37%      26%
4 13-Jan       45%      0%      66%      19%
5 13-Feb       28%     39%      74%      13%

ANSWERED: Here is how I did it in one command after you all helped me so much! I was having problems with specifying the function part.

df=read.csv("all response rates.csv")
df[-1]<-data.frame(apply(df[-1], 2, function(x) 
    as.numeric(sub("%","",as.character(x)))))
like image 506
vashts85 Avatar asked Dec 07 '25 02:12

vashts85


1 Answers

parse_number from the readr package will remove the % symbols. For your given data set, try:

library(dplyr)
library(readr)

res <- cbind(df %>% select(Year), # preserve the year column as-is
             df %>% select(-Year) %>% mutate_all(funs(parse_number))
             )

> res
    Year v1 v2 v3 v4
1 12-Oct  0  0 39 14
2 12-Nov  0  6 59  4
3 12-Dec 22  0 37 26
4 13-Jan 45  0 66 19
5 13-Feb 28 39 74 13

If you don't need to preserve your first column, you only need the excerpt:

df %>% select(-Year) %>% mutate_all(funs(parse_number))
like image 199
Sam Firke Avatar answered Dec 08 '25 14:12

Sam Firke



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!