【问题标题】:How to segment data into two sets using dplyr's setdiff如何使用 dplyr 的 setdiff 将数据分成两组
【发布时间】:2015-02-07 21:42:03
【问题描述】:

我正在使用 dplyr 将一些数据简单地拆分为训练和测试。

当我做一个简单的例子时,效果很好:

a = c(1, 2, 3, 4, 5, 6, 7, 8)
b = c("A", "B", "C", "D", "E", "F", "G", "H")

df = data.frame(a, b)

train = sample_frac(df, 0.8)
test = setdiff(df, train)

> nrow(train) + nrow(test) == nrow(df)
[1] TRUE

但是,当我尝试使用经典的 UCI Wine 数据集做同样的事情时,我似乎没有得到相同的结果:

wine = read.csv("http://www.nd.edu/~mclark19/learn/data/goodwine.csv")

wine_train = sample_frac(wine, 0.8)
wine_test = setdiff(wine, wine_train)

> nrow(wine_train) + nrow(wine_test) == nrow(wine)
[1] FALSE
> nrow(wine_train) + nrow(wine_test)
[1] 6105
> nrow(wine)
[1] 6497

我缺少关于 setdiff 的行为吗?

谢谢, AG

【问题讨论】:

  • 偷偷摸摸的错误跟踪,我同意!

标签: r


【解决方案1】:

可能是因为有重复的行:

>any(duplicated(wine))
[1] TRUE

如果您清理数据集:

drunk = wine[!duplicated(wine),]
drunk_train = sample_frac(drunk, 0.8)
drunk_test = setdiff(drunk, drunk_train)
nrow(drunk_test) + nrow(drunk_train) == nrow(drunk)
[1] TRUE

【讨论】:

  • 啊,非常感谢,我没想到要检查重复项——谢谢!
  • 遗憾的是,我可以根据个人知识证明上校的答案是正确的。我花了好几个小时才找到它!
  • 我很欣赏新df的名字——将数据连接回现实世界哈哈
猜你喜欢
  • 2015-06-06
  • 2021-06-18
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多