我有一个非常大的数据集(大约500k行和15列)。其中一列以分号分隔多个字符,如下所示:
Date a b c d
01-01-2020 A1 B1 C1a;C1b D1
30-12-2019 A2 B2 C2a;C2b;C2c D2
33-5-2018 A3 B3 C3a;C3b;C3c;C3d D3
20-11-2019 A4 B4 C4a;C4b D4
我希望将列c拆分为仅有的两列(cA和cB)。当c中有超过两个因素时,例如在第2列和第3列中,我想要创建每个可能唯一组合的行数,其他条件均相等。结果应如下:
Date a b c_01 c_02 d
01-01-2020 A1 B1 C1a C1b D1
30-12-2019 A2 B2 C2a C2b D2
30-12-2019 A2 B2 C2a C2c D2
30-12-2019 A2 B2 C2b C2c D2
33-5-2018 A3 B3 C3a C3b D3
33-5-2018 A3 B3 C3a C3c D3
33-5-2018 A3 B3 C3a C3d D3
33-5-2018 A3 B3 C3b C3c D3
33-5-2018 A3 B3 C3b C3d D3
33-5-2018 A3 B3 C3c C3d D3
20-11-2019 A4 B4 C4a C4b D4
我尝试使用
csplit
创建每个因子的单一列,然后为每行创建一个 for loop
但它并没有真正起作用。我还尝试使用 apply
函数创建类似循环的东西,但数据集太大了,我一直收到错误信息。有人能帮忙吗?非常感谢!
combn
。由于您正在使用cSplit
,因此您还可以使用data.table
中的transpose
。像这样的东西应该可以工作:cSplit(df1, "c", ";", "long")[, transpose(combn(c, 2, simplify = FALSE)), .(Date, a, b, d)]
。 - A5C1D2H2I1M1N2O1R2T1