2016-06-15 2 views
3

df - это таблица частот, где значения в a были зарегистрированы столько раз, сколько записано в колонке x,y,z. Я пытаюсь преобразовать частотную таблицу в исходные данные, поэтому я использую функцию rep().Циклическая функция rep() в r

Как мне установить функцию rep(), чтобы дать мне исходные данные для x, y, z, не повторяя функцию несколько раз, как я сделал ниже?

Кроме того, я могу ввести результат в кадр данных, имея в виду, что на выходе будет иметь различные длины столбцов:

a <- (1:10) 
x <- (6:15) 
y <- (11:20) 
z <- (16:25) 
df <- data.frame(a,x,y,z) 
df 
rep(df[,1], df[,2]) 
rep(df[,1], df[,3]) 
rep(df[,1], df[,4]) 

ответ

3

Если вы не хотите, чтобы повторить цикл, вы всегда можете попробуйте использовать функцию apply. Обратите внимание, что вы не можете сохранить его в data.frame, потому что объекты имеют разную длину, но вы можете сохранить их в списке и получить доступ к элементам аналогично data.frame. Что-то вроде это работает:

df2<-sapply(df[,2:4],function(x) rep(df[,1],x)) 

Что это sapply функция говорит для каждого столбца в df[,2:4], применить функцию rep(df[,1],x) к нему, где x это одна из ваших колонок (df[,2], df[,3] или df[,4]).

Приведенный ниже код просто гарантирует, что функция apply дает тот же результат, что и ваш оригинальный способ.

identical(df2$x,rep(df[,1], df[,2])) 
[1] TRUE 
identical(df2$y,rep(df[,1], df[,3])) 
[1] TRUE 
identical(df2$z,rep(df[,1], df[,4])) 
[1] TRUE 

EDIT:

Если вы хотите как data.frame объект, который вы можете сделать это:

res<-as.data.frame(sapply(df2, '[', seq(max(sapply(df2, length))))) 

ПримечаниеЭтот вводит NA сек в ваш data.frame так что будьте осторожны!

+0

спасибо @MikeyMike. это и сделал трюк. Но как я могу преобразовать вывод в кадр данных, с которым я могу работать, сохраняя данные в соответствующих столбцах. – Adedoyin

+0

Я попытался использовать data.frame (matrix (unlist (df), ncol = 37, by row = T)), и он просто дает мне матрицу, не помещая значения x, y и z под соответствующими столбцами. – Adedoyin

+0

Поскольку они имеют разную длину, вы в порядке с наличием НС в своих столбцах? –

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