2015-01-27 2 views
1

Я не могу для жизни меня понять функцию rbind. Я попытался использовать примеры здесь, но я не могу понять, что я делаю неправильно. Все, что я хотел бы сделать, это добавить данные из моего второго фрейма данных в первую очередь.Начальная функция rbind

Требуется ли для Rbind столбцов быть одинаковым или ...?

ParticipantA=c("A","B","C","D") 
Score1A=c("21","20","21","21") 
Score2A=c("32","40","32","31") 
Score3A=c("47","50","43","46") 
BlockA=data.frame(ParticipantA,Score1A,Score2A,Score3A) 
BlockA$Major=c("Computer_Science","Computer_Science","Computer_Science","Computer_Science") 
BlockA$Gender=c("Female","Female","Male","Male") 
ParticipantB=c("E","F","G","H") 
Score1B=c("28","28","21","22") 
Score2B=c("30","36","37","32") 
Score3B=c("41","49","49","46") 
BlockB=data.frame(ParticipantB,Score1B,Score2B,Score3B) 
BlockB$Major=c("Medical","Medical","Medical","Medical") 
BlockB$Gender=c("Female","Female","Male","Male") 

ответ

1

rbind требует, чтобы все столбцы имели одно и то же имя и класс.

0

Проблема в названиях столбцов. rbind использует заголовки столбцов для ориентации того, как они будут связывать строки. Столбцы могут быть в разных порядках, R будет использовать первый элемент для определения порядка столбцов.

В качестве альтернативы добавление другого столбца в ваши кадры данных со значением «A» или «B» в нем может сохранить вашу информацию, не помещая буквы «A» и «B» в имена столбцов < - причина вы не можете использовать rbind. Дополнительная колонка также позволит вам делать больше анализов в R, например. регрессии и других линейных моделей.

Вот один из способов для обработки ваших данных:

Создать единый набор имен столбцов, которые могут быть использованы для фреймов данных «Blocka» и «BlockB»

final_colnames <- c("Block", "Participant", "Score1", "Score2", "Score3") 

Создать новый список чтобы определить, к какому блоку принадлежат участники.

BlockA = c("A", "A", "A", "A") 

Ваши предыдущие данные

ParticipantA = c("A", "B", "C", "D") 
Score1A = c("21", "20", "21", "21") 
Score2A = c("32", "40", "32", "31") 
Score3A = c("47", "50", "43", "46") 

Ярлык «Blocka» перерабатывается здесь, чтобы назвать новый кадр данных, но не перед добавлением «Blocka» список столбца «А» «А» " A "" A ".

BlockA = data.frame(BlockA, ParticipantA, Score1A, Score2A, Score3A) 

Новые имена столбцов должны быть добавлены в этот момент, так что количество имен и число столбцов равны.

colnames(BlockA) <- final_colnames 

Теперь вы можете добавить остальные столбцы

BlockA$Major = c("Computer_Science", "Computer_Science", "Computer_Science", "Computer_Science") 
BlockA$Gender = c("Female", "Female", "Male", "Male") 

BlockB тот же самый процесс

BlockB = c("B", "B", "B", "B")    # the extra column 
ParticipantB = c("E", "F", "G", "H") 
Score1B = c("28", "28", "21", "22") 
Score2B = c("30", "36", "37", "32") 
Score3B = c("41", "49", "49", "46") 
BlockB = data.frame(BlockB, ParticipantB, Score1B, Score2B, Score3B) 
colnames(BlockB) <- final_colnames   # renaming the columns 
BlockB$Major = c("Medical", "Medical", "Medical", "Medical") 
BlockB$Gender = c("Female", "Female", "Male", "Male") 

Унифицированные имена столбцов означает, что rbind теперь будет работать.

rbind(BlockA,BlockB) 
Смежные вопросы