2017-01-15 3 views
1

Например, есть следующие data.table:Как добавить значения столбцов?

dt <- data.table(x = list(1:2, 3:5, 6:9), y = c(1,2,3)) 

#   x y 
# 1:  1,2 1 
# 2: 3,4,5 2 
# 3: 6,7,8,9 3 

Мне нужно создать новый data.table, где значение столбца у будет добавляться в списки, хранящихся в й колонке:

#   z 
# 1:  1,2,1 
# 2: 3,4,5,2 
# 3: 6,7,8,9,3 

Я пробовал лап, cbind, list, c функции. Но я не могу получить таблицу, в которой я нуждаюсь.

ОБНОВЛЕНИЕ: Вопрос отличается от paste two data.table columns, потому что тривиальное решение с функцией вставки или что-то в этом роде не работает.

+1

Если у вас много столбцов, я думаю, что это будет немного более общий 'melt (dt, measure.vars = names (dt)) [,. (list (unlist (value))), by = rowid (variable)]' –

+0

@MLavoie Это не обман этой ссылки. –

ответ

2

Это сделает его

# Merge two lists 
dt[, z := mapply(c, x, y, SIMPLIFY=FALSE)] 

print(dt) 
     x y   z 
1:  1,2 1  1,2,1 
2: 3,4,5 2 3,4,5,2 
3: 6,7,8,9 3 6,7,8,9,3 

и удаление оригинального х и у колонн

dt[, c("x", "y") := NULL] 

print(dt) 
      z 
1:  1,2,1 
2: 3,4,5,2 
3: 6,7,8,9,3 
+2

Не думайте, что вам нужен первый шаг как 'c (list (1, 2), 1)' возвращает список в любом случае –

+1

@DavidArenburg Спасибо, я не понял. Я отредактировал ответ. –

+3

И вы можете использовать 'Map' вместо' mapply' + 'SIMPLIFY = FALSE'. Хотя проблема с этим подходом заключается в том, чтобы обобщить его для более чем двух векторов –

1

Я хотел бы предложить общий подход к такого рода задачи в случае, если у вас есть несколько столбцов, вы хотели бы объединить в одну колонку

Примеры данных с несколькими столбцами

dt <- data.table(x = list(1:2, 3:5, 6:9), y = 1:3, z = list(4:6, NULL, 5:8)) 

Решение

res <- melt(dt, measure.vars = names(dt))[, .(.(unlist(value))), by = rowid(variable)] 
res$V1 
# [[1]] 
# [1] 1 2 1 4 5 6 
# 
# [[2]] 
# [1] 3 4 5 2 
# 
# [[3]] 
# [1] 6 7 8 9 3 5 6 7 8 

Идея заключается в том, чтобы преобразовать в длинный формат, а затем unlist/list группой (Вы получите предупреждение из-за различные классы в результате value колонки)

Смежные вопросы