我被一项任务卡住了很长一段时间。我有一个数据帧,它由不同的关键字和单元组成,每个关键字和单元跨越数周。我需要将这个数据帧分成较小的数据帧块,每个帧由具有相同关键字的值组成,以便这个较大的数据帧成为一个数据帧列表。
例如,假设较大的数据帧为
KEY UNITS WEEK YEAR
A-1 42 2 2019
A-1 24 3 2019
A-1 29 5 2019
A-1 36 6 2019
A-2 27 2 2019
A-2 46 3 2019
A-2 44 4 2019
B-1 53 2 2019
B-1 31 4 2019
B-1 25 5 2019
B-1 52 6 2019
B-1 30 8 2019
B-2 46 2 2019
B-2 38 3 2019
B-2 36 4 2019我想将这个数据帧分解成一个数据帧列表,其中关键字在每个单独的数据帧中保持唯一,如下所示:
KEY UNITS WEEK YEAR KEY UNITS WEEK YEAR KEY UNITS WEEK YEAR
A-1 30 2 2019 A-2 43 2 2019 B-1 24 2 2019
A-1 43 3 2019 A-2 54 3 2019 B-1 47 4 2019
A-1 25 5 2019 A-2 54 4 2019 B-1 53 5 2019
A-1 29 6 2019 B-1 25 6 2019和
KEY UNITS WEEK YEAR
B-1 41 8 2019
B-2 54 2 2019
B-2 44 3 2019
B-2 33 4 2019并获得所有这些数据帧作为数据帧列表。
现在我试着使用下面的代码片段来做,但是它有性能问题,因为我的唯一键的数量非常大:
ds1<-list()
for (j in 1:num_of_unique_keys)
{
ds1[[j]]<-subset(dataset, dataset$KEY==extkeys[j])
}
head(ds1[[2]])这里'num_of_unique_keys‘是在较大的数据帧中有多少唯一关键字的总计数,' dataset’是我正在处理的数据集,‘extkey’是数据集中唯一关键字的列表,'ds1‘是我想要作为输出获得的数据帧列表。我知道性能问题主要是因为for循环,这在R中是不可行的,但我就是找不到另一个有效的方法来解决这个问题。
如果能帮上忙我会很感激的。
发布于 2020-05-12 22:32:38
在Base-R中
split(dataset, dataset$KEY)输出:
$`A-1`
KEY UNITS WEEK YEAR
1 A-1 42 2 2019
2 A-1 24 3 2019
3 A-1 29 5 2019
4 A-1 36 6 2019
$`A-2`
KEY UNITS WEEK YEAR
5 A-2 27 2 2019
6 A-2 46 3 2019
7 A-2 44 4 2019
$`B-1`
KEY UNITS WEEK YEAR
8 B-1 53 2 2019
9 B-1 31 4 2019
10 B-1 25 5 2019
11 B-1 52 6 2019
12 B-1 30 8 2019
$`B-2`
KEY UNITS WEEK YEAR
13 B-2 46 2 2019
14 B-2 38 3 2019
15 B-2 36 4 2019https://stackoverflow.com/questions/61754363
复制相似问题