Gidday,
我正在寻找一种随机分割数据框(例如90/10分割)的方法,用于测试和训练保持特定分组标准的模型。
想象一下,我有一个这样的数据框:
> test[1:20,]
companycode year expenses
1 C1 1 8.47720
2 C1 2 8.45250
3 C1 3 8.46280
4 C2 1 14828.90603
5 C3 1 665.21565
6 C3 2 290.66596
7 C3 3 865.56265
8 C3 4 6785.03586
9 C3 5 312.02617
10 C3 6 760.48740
11 C3 7 1155.76758
12 C4 1 4565.78313
13 C4 2 3340.36540
14 C4 3 2656.73030
15 C4 4 1079.46098
16 C5 1 60.57039
17 C6 1 6282.48118
18 C6 2 7419.32720
19 C7 1 644.90571
20 C8 1 58332.34945
我要做的是使用定义的拆分标准将此数据框拆分为训练和测试集。使用提供的数据,我想以一种公司不会在两个数据框中混淆的方式拆分数据。数据集1包含与数据集2不同的公司。
想象一下90/10的分裂,理想的分割看起来像这样:
> data_90split
companycode year expenses
4 C2 1 14828.90603
12 C4 1 4565.78313
13 C4 2 3340.36540
14 C4 3 2656.73030
15 C4 4 1079.46098
16 C5 1 60.57039
5 C3 1 665.21565
6 C3 2 290.66596
7 C3 3 865.56265
8 C3 4 6785.03586
9 C3 5 312.02617
10 C3 6 760.48740
11 C3 7 1155.76758
17 C6 1 6282.48118
18 C6 2 7419.32720
1 C1 1 8.47720
2 C1 2 8.45250
3 C1 3 8.46280
> data_10split
companycode year expenses
20 C8 1 58332.34945
19 C7 1 644.90571
我希望我能清楚地指出我在寻找什么。 感谢您的反馈意见。
答案 0 :(得分:1)
comps <- levels(df$companycode)
trn <- sample(comps, length(comps)*0.9)
df.trn <- subset(df, companycode %in% trn)
df.tst <- subset(df, !(companycode %in% trn))
这会拆分您的数据,以便90%的公司都在训练集中,其余的都在测试集中。
这不保证90%的行将进行培训,10%进行测试。实现这一目标的严格方法留给读者练习。非严格的方法是重复采样,直到你获得大致正确的比例。
答案 1 :(得分:-1)
假设您没有关于所需组的条件,以下内容会将您的数据框随机分成90%和10%的分区(存储在列表中):
set.seed(1)
split(test, sample(1:nrow(test) > round(nrow(test) * .1)))
产地:
$`FALSE`
companycode year expenses
10 C3 6 760.4874
12 C4 1 4565.7831
$`TRUE`
companycode year expenses
1 C1 1 8.47720
2 C1 2 8.45250
3 C1 3 8.46280
4 C2 1 14828.90603
5 C3 1 665.21565
6 C3 2 290.66596
7 C3 3 865.56265
8 C3 4 6785.03586
9 C3 5 312.02617
11 C3 7 1155.76758
13 C4 2 3340.36540
14 C4 3 2656.73030
15 C4 4 1079.46098
16 C5 1 60.57039
17 C6 1 6282.48118
18 C6 2 7419.32720
19 C7 1 644.90571
20 C8 1 58332.34945