как вставить имя столбца перед каждой ячейкой в ​​кадре данных - PullRequest
1 голос
/ 10 апреля 2019

У меня есть следующий фрейм данных:

structure(list(PatientName = c("Tom Hardy", "Elma Fudd", "Bingo Man"
), HospitalNumber = c("H55435", "Y3425345", "Z343424"), Text = c("All bad. Not good", 
"Serious issues", "from a land far away"
)), class = "data.frame", row.names = c(NA, -3L))

Этот фрейм данных фактически взят из исходного набора данных, в котором все столбцы были объединены с заголовком столбца в качестве разделителя следующим образом:

c("PatientName Tom Hardy HospitalNumber H55435 Text All bad. Not good", 
"PatientName Elma Fudd HospitalNumber Y3425345 Text  Serious issues", 
"PatientName Bingo Man HospitalNumber Z343424 Text  from a land far away"
)

Как мне восстановить с разделителем в качестве имени столбца, чтобы я мог получить в итоге:

structure(list(X1_X2_X3 = c("PatientName Tom Hardy_HospitalNumber H55435_Text All bad. Not good", 
"PatientName Elma Fudd_HospitalNumber Y3425345_Text Serious issues", 
"PatientName Bingo Man_HospitalNumber Z343424_Text from a land far away"
)), class = "data.frame", row.names = c("X1", "X2", "X3"))

В данный момент я делаю следующее, но это выглядит немного грязно.Есть ли более аккуратный способ?

    Interim<-data.frame(t(data.frame(apply(myDeets, 1, function(x) paste(names(x),x)))),stringsAsFactors = FALSE)
mynesdf<-tidyr::unite_(Interim, paste(colnames(Interim), collapse="_"), colnames(Interim))

1 Ответ

2 голосов
/ 10 апреля 2019

Мы paste соответствующие имена столбцов с столбцами, используя Map и свернуть его

v1 <- do.call(paste, c(Map(paste, names(df1), df1), sep="_"))
data.frame(X1_X2_X3 = unname(v1))

#                                                             X1_X2_X3
#1     PatientName Tom Hardy_HospitalNumber H55435_Text All bad. Not good
#2      PatientName Elma Fudd_HospitalNumber Y3425345_Text Serious issues
#3 PatientName Bingo Man_HospitalNumber Z343424_Text from a land far away

Или другой вариант - stack, а затем paste

v2 <- with(stack(df1), paste(ind, values))
unname(tapply(v2, rep(seq_len(nrow(df1)), nrow(df1)), FUN = paste, collapse= "_"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...