删除R中的重复项而不转换为数字

时间:2016-09-30 15:47:37

标签: r duplicates

我在数据框中有2个变量,有300个观察值。

$ 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

2 个答案:

答案 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.csv,{{ 1}}和大多数read.table函数包括data.frameas.data.frame):

rbind

(请注意,这仍然包含嵌入式引号,因此您仍需要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

答案 1 :(得分:-1)

尝试

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

然后 data<-unique(data)

您还可以在读取数据时传递参数stringAsFactor = FALSE。这通常是一个好主意。