2016-09-30 26 views
1

我在具有300個觀察值的數據框中有2個變量。在R中刪除重複項而不轉換爲數字

$ imagelike: int 3 27 4 5370 ... 
$ user: Factor w/ 24915 levels "\"0.1gr\"","\"008bla\"", .. 

我然後試圖刪除重複,如"- "出現2次:

testclean <- data1[!duplicated(data1), ] 

這使我的警告消息:

In Ops.factor(left): "-"not meaningful for factors 

我已經然後它轉換爲一個maxtrix:

data2 <- data.matrix(data1) 
testclean2 <- data2[!duplicated(data2), ] 

這個技巧 - 但是 - 它將userNames轉換爲數字。

============================================== =========================== 我是新的,但我已經嘗試查看以前的帖子關於這個主題(包括下面的一個),但它沒有發揮出來:

Convert data.frame columns from factors to characters

+0

這看起來像是一個在閱讀數據時可能會更好地解決的問題。你能夠獲得一些原始數據嗎? – user20650

+0

對不起,我在上面的評論中錯過了一個單詞;)。應該閱讀*你能**分享**一些原始數據嗎?(比如前十行/五列)。另外,你可以展示你如何閱讀數據。歡呼 – user20650

+0

我建議你通過閱讀[如何提問](http://stackoverflow.com/help/mcve)和關於[可重現的問題]來改進你的問題(http://stackoverflow.com/questions/5963269/how -to-化妝一個偉大-R重現-例子)。如果您的問題的結構方式有利於我們的幫助,您將獲得更多的意見(以及可能的答案)。 – r2evans

回答

-1

嘗試

data$userName <- as.character(data$userName)

然後 data<-unique(data)

讀取數據時,您也可以傳遞參數stringAsFactor = FALSE。這通常是一個好主意。

+0

從他們的屏幕截圖和'str',它不太可能是這麼簡單。例如,'dat < - data.frame(x = 1:3,y = c(「word」,「\」word \「」,「和另一個」)); as.character(dat $ y);長度(唯一(as.character(dat $ y)))' – user20650

+0

這可能可以用gsub替換''''以空格解決。像'GSUB(「「」,‘’,數據$用戶名)' –

+0

這也許應該是你的答案,而不是你貼什麼。 –

1

一些示例數據,從圖像(請不要發佈數據的圖像!):

data1 <- data.frame(imageLikeCount = c(3,27,4,4,16,103), 
        userName = c("\"testblabla\"", "test_00", "frenchfries", "frenchfries", "test.inc", "\"parmezan_pizza\"")) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : Factor w/ 5 levels "\"parmezan_pizza\"",..: 2 5 3 3 4 1 

要解決與因素,以及嵌入式引號的問題:

data1$userName <- gsub('"', '', as.character(data1$userName)) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : chr "testblabla" "test_00" "frenchfries" "frenchfries" ... 

像@DanielWinkler建議的那樣,如果您可以更改數據的讀入方式或定義方式,那麼您可以選擇包含stringsAsFactors = FALSE(該參數在許多功能中都被接受,包括read.csvread.table,第二最data.frame功能,包括as.data.framerbind):

data1 <- data.frame(imageLikeCount = c(3,27,4,4,16,103), 
        userName = c("\"testblabla\"", "test_00", "frenchfries", "frenchfries", "test.inc", "\"parmezan_pizza\""), 
        stringsAsFactors = FALSE) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : chr "\"testblabla\"" "test_00" "frenchfries" "frenchfries" ... 

(請注意,這仍然嵌入式引號,所以你仍然需要像data1$userName <- gsub('"', '', data1$userName)

現在,我們有數據,看起來像這樣。 :

data1 
# imageLikeCount  userName 
# 1    3  testblabla 
# 2    27  test_00 
# 3    4 frenchfries 
# 4    4 frenchfries 
# 5    16  test.inc 
# 6   103 parmezan_pizza 

和您需要刪除重複的工作:

data1[! duplicated(data1), ] 
# imageLikeCount  userName 
# 1    3  testblabla 
# 2    27  test_00 
# 3    4 frenchfries 
# 5    16  test.inc 
# 6   103 parmezan_pizza 
+0

如果這符合你的問題,你可以接受它(答案左邊的複選標記),並考慮加入投票嗎?Stack Exchange禮節指導用最佳答案結束問題(可以在將來更改如果需要的話),如果你發現一個或多個答案特別好,你可以對它們進行「投票」。這兩個操作都會給予海報感謝,榮譽和可衡量的聲望點。 – r2evans