Мы можем использовать separate
следующим образом без жесткого кодирования любого из значений.
tidyr::separate(df, names(df), sep = ",", into = strsplit(names(df), "\\.")[[1]])
# Ozone Solar Wind Temp Month Day
#1 41 190 7.4 67 5 1
#2 36 118 8 72 5 2
#3 12 149 12.6 74 5 3
#4 18 313 11.5 62 5 4
#5 NA NA 14.3 56 5 5
Используя только известную нам базу R, можно разделить строки на запятую, используя strsplit
и rbind
список, и присвоить имена, используя setNames
.
setNames(do.call(rbind.data.frame, strsplit(as.character(df[[1]]), ",")),
strsplit(names(df), "\\.")[[1]])
Данные
df <- structure(list(Ozone.Solar.Wind.Temp.Month.Day = structure(c(4L,
3L, 1L, 2L, 5L), .Label = c("12,149,12.6,74,5,3", "18,313,11.5,62,5,4",
"36,118,8,72,5,2", "41,190,7.4,67,5,1", "NA,NA,14.3,56,5,5"), class =
"factor")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5"))