这个问题与data.table
类有关,来自同名R
包。
给定一个data.table
对象,我想根据它的某些列的值将它分成切片。
为了弄清楚我必须做什么,我举了一个例子。
假设这是输入data.table
。
dataf <- data.frame(list(
T = c(1.80,1.81,1.82,1.83,1.85,1.87,1.90,1.95,2.00),
A = c(1,0,1,1,1,0,1,1,0),
B = c(0,0,0,0,0,0,1,0,0),
C = c(0,1,0,1,1,0,1,1,0),
D = c(0,0,1,1,1,0,0,1,0))
)
datat <- data.table(dataf)
datat
# T A B C D
# 1: 1.80 1 0 0 0
# 2: 1.81 0 0 1 0
# 3: 1.82 1 0 0 1
# 4: 1.83 1 0 1 1
# 5: 1.85 1 0 1 1
# 6: 1.87 0 0 0 0
# 7: 1.90 1 1 1 0
# 8: 1.95 1 0 1 1
# 9: 2.00 0 0 0 0
目标是根据n
所选列的值(带有n = 0, ..., ncol(datat) - 1
)将此表拆分为子表。
对于此输入,选择作为锚列C
和D
,输出必须类似于:
# $`0|0`
# T A B C D
# 1: 1.80 1 0 0 0
# $`1|0`
# T A B C D
# 1: 1.81 0 0 1 0
# $`0|1`
# T A B C D
# 1: 1.82 1 0 0 1
# $`1|1`
# T A B C D
# 1: 1.83 1 0 1 1
# 2: 1.85 1 0 1 1
# $`0|0`
# T A B C D
# 1: 1.87 0 0 0 0
# $`1|0`
# T A B C D
# 1: 1.90 1 1 1 0
# $`1|1`
# T A B C D
# 1: 1.95 1 0 1 1
# $`0|0`
# T A B C D
# 1: 2.00 0 0 0 0
从刚刚显示的示例中可以推断,拆分条件为:
- 所选列的值与上一行中的值不同?
重要提示:在本例中,“值”一词必须用作一对列值。
注意:
我当时认为这个输出结构(第二个目标)我必须对这个子表应用一个(或两个)函数,获取它们的输出并通过通用名称聚合它们(例如求和、合并或其他操作)元素列表(即0|0
with 0|0
、1|0
with1|0
等)。
如果您认为有一个更合适或更简单的输出结构也可以实现第二个目标,那么您的建议是非常受欢迎的。
显然,解决方案的性能很重要,因为我必须处理大表。
不幸的是,我认为自己是一个data.table
包新手,事实上我只知道一些关于它的事情:如何通过 colnames 进行子集化等。
因此,非常感谢您的帮助,因为它将帮助我学习新的东西。提前致谢。