【发布时间】:2013-04-09 17:13:29
【问题描述】:
给定一个data.table 对象,我会将一些分组列的值折叠到一个对象中,并将生成的对象插入到一个新列中。
dt <- data.table(
c('A|A', 'B|A', 'A|A', 'B|A', 'A|B'),
c(0, 0, 1, 1, 0),
c(22.7, 1.2, 0.3, 0.4, 0.0)
)
setnames(dt, names(dt), c('GROUPING', 'NAME', 'VALUE'))
dt
# GROUPING NAME VALUE
# 1: A|A 0 22.7
# 2: B|A 0 1.2
# 3: A|A 1 0.3
# 4: B|A 1 0.4
# 5: A|B 0 0.0
我认为首先需要指定要分组的列,所以我应该从 dt[, OBJECTS := <expr>, by = GROUPING] 之类的内容开始。
很遗憾,我不知道要使用表达式<expr>,所以结果如下:
# GROUPING OBJECTS
# 1: A|A <vector>
# 2: B|A <vector>
# 3: A|B <vector>
每个<vector>必须包含其他列的值。例如,第一个 <vector> 必须是一个命名向量,相当于:
eg <- c(22.7, 0.3)
names(eg) <- c('0', '1')
# 0 1
# 22.7 0.3
【问题讨论】:
-
您是否正在尝试将 data.table 重塑为宽格式?
-
你的
expr应该类似于list(list(...)) -
但是为什么呢?你不觉得这很难处理吗?为什么不对其进行整形,让列的值对应于
0和1? -
@Arun 我知道这很难使用,但这正是我需要的 :)
标签: r grouping data.table