2015-08-16 2 views
1

Есть ли способ создать data.frame быстрее или умнее, чем тот, который я сделал ниже?Быстрое создание data.frame

df <- data.frame(ID = rep(c("WT", "KO"), each = 4), 
       Time = rep(c("A", "B", "C", "D"), times = 2), 
       replicate(5,sample(0:100,8,rep=TRUE))) 

colnames(df)<-c("ID", "Time", c("a", "b", "c", "d", "e")) 

data.frame должен по-прежнему выглядеть так

df 
ID Time a b c d e 
WT A 28 56 50 60 15 
WT B 54 77 11 67 34 
WT C 53 8 87 62 55 
WT D 30 73 47 82 1 
KO A 24 83 14 17 36 
KO B 91 83 72 41 4 
KO C 79 17 76 21 54 
KO D 41 40 77 49 92 

Благодарность

+2

Вы можете сделать Somthing как 'data.frame (expand.grid (с ("WT", "КО"), ПИСЬМА [1 : 4]), матрица (образец (40), ncol = 5)) ' –

+0

Спасибо. Как можно объединить имена колен? – Al14

+0

Могу ли я использовать имена вместо setNames? Это не работает для меня – Al14

ответ

6

Вы можете просто использовать expand.grid для нечисловых уникальных комбинаций (иногда вы можете даже использовать построил его данные устанавливает такие LETTERS) и запускает sample только один раз, завернув его в матрицу, что-то вроде

set.seed(123) 
data.frame(expand.grid(c("WT", "KO"), LETTERS[1:4]), 
      matrix(sample(40), ncol = 5)) 
# Var1 Var2 X1 X2 X3 X4 X5 
# 1 WT A 12 36 6 11 24 
# 2 KO A 31 15 1 27 13 
# 3 WT B 16 29 8 22 25 
# 4 KO B 33 14 21 28 26 
# 5 WT C 34 19 32 4 20 
# 6 KO C 2 38 37 35 7 
# 7 WT D 18 3 40 10 5 
# 8 KO D 30 23 17 9 39 

Для менее конкретных случаев, я бы рекомендовал смотреть в @TylerRinkers wakefield пакет, который позволяет генерировать случайные наборы данных легко.


Просто для общей информации, используя data.table v 1.9.5+ теперь вы можете установить новые имена столбцов по ссылке с помощью setnames. В самом деле, если ваш новый набор данных называется res, можно было бы просто сделать

library(data.table) # v1.9.5+ 
setnames(res, c("ID", "Time", letters[1:5])) 
+0

Чтобы увеличить число, которое нужно отбирать, я попробовал выборку (0: 100,8, rep = TRUE) вместо образца (40), но это не сработало. – Al14

+1

Вы имеете в виду нечто вроде 'matrix (sample (100), ncol = 10)'? 100 не делит на 8 равномерно. –

+0

Я хочу взять матрицу из 40 чисел (образец (40) «случайным образом из более крупной когорты, 1000 чисел или даже просто случайным образом, например, положительный и отрицательный» – Al14

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