Here is another option with data.table
library(data.table)
setDT(df1)[, .(V2= toString(V2)), V1][, paste0("V", 2:4) :=tstrsplit(V2, ", ")][]
# V1 V2 V3 V4
#1: RAB27A RAD21 STAT1 NA
#2: ITGA4 RAD21 NA NA
#3: PANK3 SIX5 SREBF1 USF1
Or this can be done with just dcast
dcast(setDT(df1), V1~rowid(V1, prefix = "V"), value.var="V2")
# V1 V1 V2 V3
#1: ITGA4 RAD21 NA NA
#2: PANK3 SIX5 SREBF1 USF1
#3: RAB27A RAD21 STAT1 NA
data
df1 <- structure(list(V1 = c("RAB27A", "RAB27A", "ITGA4", "PANK3", "PANK3",
"PANK3"), V2 = c("RAD21", "STAT1", "RAD21", "SIX5", "SREBF1",
"USF1")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -6L))