R data.table按组创建列表列 [英] R data.table create list column by group
本文介绍了R data.table按组创建列表列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我下面有一个 data.table
,我想将一个函数应用于按 v1
和的列
,则结果列 v2
组 v3
应该是下面的向量列表.
I have a data.table
below, and I would like to apply a function to column v2
group by v1
and order
, the resulting column v3
should be a list of vectors below.
如何编写此函数,以便它将为每个组的第一行返回一个0s向量.(order == 1& v1%in%c(1,2))
.对于该组中的每个后续行,向量将在向量的右边附加上一行的 v2
值,同时从左边碰到一个 0
.
How do I write this function such that it will return a vector of 0s for each group's first row (order == 1 & v1 %in% c(1, 2))
. For each subsequent row in the group, the vector will append previous row's v2
value to the right of the vector while bumping off one 0
from the left.
初始 data.table
t3 <- data.table(
v1 = rep(1:2, each = 5),
order = rep(1:5, 2),
v2 = c(6, 9, 6, 8, 6, 2, 5, 7, 8, 2)
)
v1 order v2
1: 1 1 6
2: 1 2 9
3: 1 3 6
4: 1 4 8
5: 1 5 6
6: 2 1 2
7: 2 2 5
8: 2 3 7
9: 2 4 8
10: 2 5 2
正在应用功能...
输出:
t3[, v3 := list(c(0, 0, 0, 0, 0),
c(0, 0, 0, 0, 6),
c(0, 0, 0, 6, 9),
c(0, 0, 6, 9, 6),
c(0, 6, 9, 6, 8),
c(0, 0, 0, 0, 0),
c(0, 0, 0, 0, 2),
c(0, 0, 0, 2, 5),
c(0, 0, 2, 5, 7),
c(0, 2, 5, 7, 8))]
v1 order v2 v3
1: 1 1 6 0,0,0,0,0
2: 1 2 9 0,0,0,0,6
3: 1 3 6 0,0,0,6,9
4: 1 4 8 0,0,6,9,6
5: 1 5 6 0,6,9,6,8
6: 2 1 2 0,0,0,0,0
7: 2 2 5 0,0,0,0,2
8: 2 3 7 0,0,0,2,5
9: 2 4 8 0,0,2,5,7
10: 2 5 2 0,2,5,7,8
推荐答案
我们可以尝试
t3[order(order), .(order, v2, shift(v2, 5:1, fill = 0)), by = v1]
输出:
v1 order v2 V3
1: 1 1 6 0,0,0,0,0
2: 1 2 9 0,0,0,0,6
3: 1 3 6 0,0,0,6,9
4: 1 4 8 0,0,6,9,6
5: 1 5 6 0,6,9,6,8
6: 2 1 2 0,0,0,0,0
7: 2 2 5 0,0,0,0,2
8: 2 3 7 0,0,0,2,5
9: 2 4 8 0,0,2,5,7
10: 2 5 2 0,2,5,7,8
这篇关于R data.table按组创建列表列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文