Далее используется пакет reshape2 для получения результатов, которые вы ищете.Обратите внимание, что, поскольку столбцы преобразуются в длинный формат data.frame, где существуют пропущенные значения, они заменяются NA (ваш вопрос показывает пробелы, в которых столбцы имеют два элемента против вас, но настоящий пробел невозможен вdata.frame, так как все строки должны быть заполнены чем-то, в этом случае NA, где пусто).Подход заключается в следующем: (1) использовать str_split для разделения ваших пар имя / значение на «_» и вернуть их во фрейм данных (2) использовать dcast, где значение имени является функцией строки вашего значения
library(reshape2)
head(df$V1)
df <- data.frame(V1=c("FOO1_Yu","FOO1_uN","FOO2_Yo","FOO2_yA","FOO10_nO","FOO10_Yes","FOO1_NoY"),stringsAsFactors = F)
splits <- lapply(df$V1,function(x)
{
if (!grepl("_",x))
{
print(paste("Skipping bad input=",x))
return (NULL)
} else {
pair <- unlist(strsplit(x,split="_"))
name <- pair[1]
value <- x
return (data.frame(name=name,value=value))
}
})
splits <- do.call("rbind",splits)
df <- dcast(splits,value ~ name)
Результат выводится следующим образом:
value FOO1 FOO2 FOO10
1 FOO1_Yu FOO1_Yu <NA> <NA>
2 FOO1_uN FOO1_uN <NA> <NA>
3 FOO2_Yo <NA> FOO2_Yo <NA>
4 FOO2_yA <NA> FOO2_yA <NA>
5 FOO10_nO <NA> <NA> FOO10_nO
6 FOO10_Yes <NA> <NA> FOO10_Yes
7 FOO1_NoY FOO1_NoY <NA> <NA>