2016-07-13 3 views
0

Я не могу на всю жизнь выяснить, где простая ошибка в моем цикле for для выполнения тех же анализов по нескольким кадрам данных и выводам каждый новый кадр итерации, используя переменную, используемую вместе с дополнительной строкой для идентификации нового фрейма данных.Для перебора списка кадров данных и создания новых фреймов данных из каждой итерации с использованием имени переменной

Вот мой код:

john и jane 2 кадры данных среди многих я надеюсь перебрать и сравните bcm найти одинаковые результаты в строках.

x <- list(john,jane) 

for (i in x) { 
    test <- rbind(bcm,i) 
    test$dups <- duplicated(test$Full.Name,fromLast=T) 
    test$dups2 <- duplicated(test$Full.Name) 
    test <- test[which(test$dups==T | test$dups2==T),] 
    newname <- paste("dupl",i,sep=".") 
    assign(newname, test) 
} 

До сих пор, я могу либо получить называние корректно работать без включения данных x или цикл, чтобы правильно завершить, не называя новые кадры данных правильно.

Предназначенный Результат: Я надеюсь создать новые кадры данных dupl.john и dupl.jane, чтобы показать, какие строки дублируются по сравнению с bcm.

Я понимаю, что lapply() может быть лучше использовать, и я очень открыт для этой формы решения. Я не мог понять, как использовать его для решения моей проблемы, поэтому я обратился к более знакомому для цикла.


EDIT:

Извините, если я не быть более ясным. У меня около 13 кадров данных, что я хочу выполнить один и тот же анализ, чтобы найти повторяющиеся строки в $Full.Name. Я мог бы сделать первые 4 строки моего цикла, а затем dupl.john <- test 13 раз (для каждого кадра данных), но я намеренно пытаюсь написать цикл for или lapply(), чтобы получить больше знаний в R и потому что я уверен, что он более эффективен ,

+0

Попробуйте 'test <- rbind (bcm, get (i))'. Действительно, некоторые 'lapply', возможно, удобны. –

ответ

1

Если я правильно понял, исходя из вашего предполагаемого результата, возможно, использование опции match_df может быть опцией.

library(plyr) 
dupl.john <- match_df(john, bcm) 
dupl.jane <- match_df(jane, bcm) 

dupl.john и dupl.jane будут как кадры данных, и оба будут иметь те строки, которые находятся в этих кадрах данных и млрд куб. Это то, чего вы пытаетесь достичь?

EDITED после первого комментария

library(plyr) 
l <- list(john, jane) 
res <- lapply(l, function(x) {match_df(x, bcm, on = "Full.Name")}) 
dupl.john <- as.data.frame(res[1]) 
dupl.jane <- as.data.frame(res[2]) 

Теперь res будет иметь список фреймов данных с матчей, основываясь на колонке «Full.Name».

+0

Извините, если я не буду более ясным. У меня около 13 кадров данных, в общем, я хочу выполнить тот же анализ, чтобы найти повторяющиеся строки в '$ Full.Name'. Я мог бы сделать первые 4 строки моего цикла, а затем 'dupl.john <- test' 13 раз (для каждого кадра данных), но я намеренно пытаюсь написать цикл for или' lapply() ', чтобы получить больше знаний в R и потому что я уверен, что он более эффективен. – medavis6

+0

Хорошо, я только что отредактировал первое решение. –

+0

Спасибо за редактирование. Это больше похоже на то, что я пытаюсь сделать. Тем не менее, моя последняя вещь, которую я пытаюсь проделать, - это проблема, которую я, вероятно, вызвал своими объяснениями (или их отсутствием).Я хотел бы сохранить все совпадения строк с помощью '$ Full.Name'. Поэтому я в настоящее время экспериментирую с 'join()', а не 'match_df()'. Если у вас есть время изучить это, это очень ценится. В противном случае я могу принять ваше редактирование как ответ из-за формулировки моего первоначального вопроса. – medavis6