2013-01-17 78 views
3

我有一个源于excel文件的数据框。它在列上方具有通常的标题,但某些列中有我想要删除的%符号。从数据框中删除百分比

搜索计算器给出了从基体中去除百分率一些不错的代码,Any way to edit values in a matrix in R?,当我试图将它应用到我的数据帧

as.numeric(gsub("%", "", my.dataframe)) 

相反,它只是返回的“NA” s的字符串,没有工作一条警告信息解释说他们是通过强制手段引进的。当我申请,

gsub("%", "", my.dataframe)) 

我得到的值“C(...)”的形式,其中...代表数字后面是转载了,我必须每一列逗号。没有%是证据;如果我可以把它们放回去......我会做饭。

任何帮助很好地收到,谢谢。

+3

与往常一样,除非您提供数据供我们使用,否则很难提供帮助。 'dput(head(...))'通常是有用的。 – joran

+0

它听起来像你可能有你的data.frame中的因素。尝试阅读设置stringsAsFactors为FALSE:read.table(file =“file.csv”,stringsAsFactors = FALSE) – tcash21

+1

@ tcash21'stringsAsFactors = FALSE'不能解决问题,因为一旦您读取数据,然后应用Arun的解决方案结果data.frame将只包含因素,数字元素将被强制为因子,所以解决方案是使用Arun的建议并在'sapply'调用中添加'as.numeric'。 –

回答

7

基于@阿伦的评论和成像的data.frame的样子:

> DF <- data.frame(X = paste0(1:5,'%'), 
        Y = paste0(2*(1:5),'%'), 
        Z = 3*(1:5), stringsAsFactors=FALSE) 

> DF # this is how I imagine your data.frame looks like 
    X Y Z 
1 1% 2% 3 
2 2% 4% 6 
3 3% 6% 9 
4 4% 8% 12 
5 5% 10% 15 

> # Using @Arun's suggestion 
> (DF2 <- data.frame(sapply(DF, function(x) as.numeric(gsub("%", "", x))))) 
    X Y Z 
1 1 2 3 
2 2 4 6 
3 3 6 9 
4 4 8 12 
5 5 10 15 

sapply呼吁增加as.numeric为结果的cols是数字,如果我不使用as.numeric结果会是factor。请使用sapply(DF2, class)

+0

感谢@Jiber和其他人(我只能提一个人)。上面的代码就像一个魅力。据说,“像往常一样没有数据”对此表示道歉,但我正在使用的数据是专有的;它来自一些实验。实际上,清理的数据一式三份。我很可能不得不开始另一个问题线程,但是,如何通过查找值的平均值1:3,4:6,7:9等来将我的一式三份数据减少到三分之一的大小,直到达到22: 24并将所有内容保存在新的数据框中? – user1945827

+1

@ user1945827如果此答案符合您的需求,请考虑接受它,方法是在绿色的勾号中 –