sách gpt4 ai đã đi

r - 分组时折叠 data.table 列值

In lại 作者:行者123 更新时间:2023-12-04 17:36:51 36 4
mua khóa gpt4 Nike

给定一个 dữ liệu.bảng对象我会将一些分组列的值折叠到一个对象中,然后将生成的对象插入到一个新的列中。

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 := , by = GROUPING] 之类的内容开始。 .

不幸的是,我不知道表达式 使用,结果如下:
# GROUPING OBJECTS
# 1: A|A
# 2: B|A
# 3: A|B

每个 必须包含其他列的值。例如第一个 必须是一个命名向量,相当于:
eg <- c(22.7, 0.3)
names(eg) <- c('0', '1')
# 0 1
# 22.7 0.3

1 Câu trả lời

hiện hữu j 内部工作: 如果你想让一个列的值成为一个向量,你需要将输出包装在 list(.) ở giữa. .
j本身需要调用 danh sách ,因此您的最终表达式将类似于嵌套的 danh sách ,Ví dụ:

dt[, list(allNames=list(NAME), allValues=list(VALUE)), by=GROUPING]

# GROUPING allNames allValues
# 1: A|A 0,1 22.7,0.3
# 2: B|A 0,1 1.2,0.4
# 3: A|B 0 0

正如@Mnel 指出的那样,等效地:
dt[, lapply(.SD, list), by=GROUPING]

如果你想要它的长格式,那么你的 的结构将会: list( c( list(), list(), ..., list() ) )Ví dụ:
dt[, list(c(list(NAME), list(VALUE))), by=GROUPING]

# GROUPING V1
# 1: A|A 0,1
# 2: A|A 22.7,0.3
# 3: B|A 0,1
# 4: B|A 1.2,0.4
# 5: A|B 0
# 6: A|B 0

或等效地:
dt[, list(lapply(.SD, c)), by=GROUPING]

关于r - 分组时折叠 data.table 列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051608/

36 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com