2017-07-26 58 views
0

我有一組數據,其中某些元素前面有「<」,我需要刪除「<」,以便我可以執行一些數據分析。數據保存在.txt文件中,然後使用read.table將其引入到R中。下面是一個文本文件的例子。從數據框中的元素中刪除字符

Background: 18 <10 27 22 <3 

Site: 30 44 23 <16 13 

我以前x=read.file做一個數據幀,然後試圖gsub("<","",x)去除"<",結果是完全出乎意料,至少對我來說。這就是我得到的結果。

[1] "1:2"  "c(18, 30)" "1:2"  "c(27, 23)" "c(2, 1)" "1:2" 

我不知道這意味着什麼或爲什麼發生。我將非常感謝解釋這裏發生的事情,以及我應該如何去完成我的目標。

+0

'gsub'不直接在'data.frame'上工作 - 'x [] < - lapply(x,gsub,pattern =「<」,replacement =「」)'我猜可能是你想要什麼。 – thelatemail

回答

0
df <- read.table(header = TRUE, text = "Background Site 
       18 30 
       <10 44 
       27 23 
       22 <16 
       <3 13", stringsAsFactors = FALSE) 

您可以使用mutate_at並應用gsub功能,您希望去掉前面的<標誌變量(即BackgroundSite)。

library(dplyr) 
df %>% mutate_at(vars(Background, Site), 
       funs(as.numeric(gsub("^<", "", .)))) 

輸出是:

Background Site 
1   18 30 
2   10 44 
3   27 23 
4   22 16 
5   3 13 
+0

似乎數據更像'x < - read.table(text =「18 <10 27 22 <3 \ n30 44 23 <16 13」)',從他們嘗試的輸出來判斷。 –

0

閱讀文件,readLines,執行gsub,然後用read.table重新閱讀。沒有軟件包使用:

read.table(text = gsub("<", "", readLines("myfile")), as.is = TRUE) 

如果數據不能從一個文件來,但已經在數據幀DF然後定義clean功能,清潔的DF一列,並將其應用到每個數字列:

clean <- function(x) as.numeric(gsub(">", "", x)) 
DF[-1] <- lapply(DF[-1], clean)