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)))))
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With