2016-09-30 23 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