2013-01-17 77 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如果此答案符合您的需求,請考慮接受它,方法是在綠色的勾號中 –