【问题标题】:Duplicate function produces a large factor [duplicate]重复函数产生很大的因素[重复]
【发布时间】:2017-02-24 20:22:05
【问题描述】:

我有一个这样的一列数据框:

col1
line1
line1
line2

我尝试使用以下方法删除重复项:

df2 <- df[!duplicated(df), ]

但它会产生一个很大的因素而不是删除重复项。结构类似的结果是这样的:

str(df2)
 Factor w/ 7472 levels

【问题讨论】:

  • 欢迎来到 Stack Overflow!对于涉及故障排除代码的问题,我们要求您提供可重现的示例。您可以使用dput() 共享数据。

标签: r


【解决方案1】:

当您只有一列时,您需要使用drop = FALSE 来获取数据框:

df2 <- df[!duplicated(df), , drop = FALSE]

另一种选择是使用unique 函数:

df2 <- unique(df)

两种方法的结果是一样的:

> df2
   col1
1 line1
3 line2

【讨论】:

  • 您不需要 drop 除非只有 1 列(如果只有 1 列,为什么要使用 data.frame?)。
  • drop = FALSE 确实只有当您的数据框中有一列时才需要(如 OP 所述)
【解决方案2】:
col1 <- c("line1",
          "line1",
          "line2")

df <- data.frame(col1=col1, x=c(1,2,3))

df1 <- df[!duplicated(df$col1),]
df1
   col1 x
1 line1 1
3 line2 3
class(df1)

[1]“数据帧”

【讨论】:

  • 这不会返回数据帧,这是我理解的 OP 想要的
  • @h3rm4n 当超过 1 列时返回一个 data.frame。如果有 1 列,则不应使用 data.frame。
  • 是的,但是 OP 只有一列
  • 您更改了示例数据,imo 不正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2021-11-07
  • 1970-01-01
  • 2013-05-14
  • 2016-04-30
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多