R data.table按组创建列表列 [英] R data.table create list column by group

查看:47
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆