#r #data.table
Вопрос:
Я хотел бы объединить несколько столбцов в один столбец списка в таблице data.table в примере R.:
require(data.table)
dt = data.table(col1 = LETTERS[1:5],
col2 = rep('test', 5),
col3 = c('hello', 'yes', 'no', 'maybe', 'why'))
Вопрос: Как я могу объединить col2
и col3
в столбец списка?
То, что я пробовал до сих пор:
cols = c('col2', 'col3')
dt[ , col4 := paste0(.SD, collapse = ', '), .SDcols = cols,
by = 1:nrow(dt) ] # paste's them together
dt[ , col4 := c(.SD), .SDcols = cols,
by = 1:nrow(dt) ] # drops col3
dt[ , col4 := lapply(.SD, c), .SDcols = cols,
by = 1:nrow(dt) ] # drops col3
Ответ №1:
Вы можете использовать data.table
transpose
эту функцию.
library(data.table)
cols = c('col2', 'col3')
dt[ , col4 := lapply(transpose(.SD), c), .SDcols = cols]
dt
# col1 col2 col3 col4
#1: A test hello test,hello
#2: B test yes test,yes
#3: C test no test,no
#4: D test maybe test,maybe
#5: E test why test,why
class(dt$col4)
#[1] "list"
Комментарии:
1. Могу я попросить
.SD
вас об этом?2.
.SD
представляет подмножество данных. Он состоит из столбцов, указанных вcols
.
Ответ №2:
Мы можем использовать
dt[, col4 := do.call(paste, c(.SD, sep = ", ")), .SDcols = col2:col3]