#r #datatable #data-manipulation
Вопрос:
У меня есть следующие данные в R:
name = c("person1", "person2", "person3", "person1", "person2", "person3")
var1 = c(1,3,5,6,7,3)
var2 = c(1,1,1,1,1,1)
var3 = rnorm(6,5,6)
var4 = rnorm(6,1,6)
iteration_round = c(1,1,1,2,2,2)
frame = data.frame(name, var1, var2, var3, var4, iteration_round)
name var1 var2 var3 var4 iteration_round
1 person1 1 1 21.931815 0.4904012 1
2 person2 3 1 -2.261360 -2.3358434 1
3 person3 5 1 5.493085 5.7269291 1
4 person1 6 1 -5.039148 -9.4483417 2
5 person2 7 1 -3.662336 5.8499795 2
6 person3 3 1 5.297230 -2.8756166 2
Я пытаюсь отформатировать данные таким образом, чтобы столбцы выглядели так (столбец «iteration_round» теперь будет иметь только уникальные значения 1,2,3,..) :
person1_var1 person1_var2 person1_var3 person1_var4 person2_var1 person2_var2, person2_var3, person2_var4 person3_var1 person3_var2, person3_var3, person3_var4 iteration_round
Это должно выглядеть примерно так (я просто заполнил случайные числа для примера, но столбец iteration_round правильный):
person1_var1 person1_var2 person1_var3 person1_var4 person2_var1 person2_var2 person2_var3 person2_var4 person3_var1 person3_var2 person3_var3 person3_var4 iteration_round
1 15 4 5 5 5 5 5 6 4 5 11 6 1
2 5 2 6 6 7 8 9 9 1 0 2 6 2
Я попытался сделать это с помощью библиотеки data.table
library(data.table)
my_table = dcast(setDT(frame), var1 var2 var3 var4 ~ iteration_round , value.var = 'name')
Но это не дает желаемого результата:
var1 var2 var3 var4 1 2
1: 1 1 21.931815 0.4904012 person1 <NA>
2: 3 1 -2.261360 -2.3358434 person2 <NA>
3: 3 1 5.297230 -2.8756166 <NA> person3
4: 5 1 5.493085 5.7269291 person3 <NA>
5: 6 1 -5.039148 -9.4483417 <NA> person1
6: 7 1 -3.662336 5.8499795 <NA> person2
Может кто-нибудь, пожалуйста, показать мне, как это исправить?
Спасибо
Ответ №1:
dcast
может содержать несколько столбцов value.var
. Создайте формулу с помощью «iteration_round» и «name»
dcast(setDT(frame), iteration_round ~ name,
value.var = c('var1', 'var2', 'var3', 'var4'))
Комментарии:
1. это именно то, что я искал! Спасибо! через несколько минут я могу принять ваш ответ! Я также обновил свой вопрос, чтобы показать пример . Спасибо!