Извлеките часть значения переменной до '_'

У меня есть данные, которые выглядят так:

Linking <- data.frame(
 ID = c(round((runif(20, min=10000, max=99999)), digits=0), rep(NA,10)),
 PSU = c(paste("A", round((runif(20, min=10000, max=99999)), digits = 0), sep = ''), rep(NA,10)),
 qtr = c(rep(1:10, 2), rep(NA,10)), 
 date = rep("13/04/56", 30),
 Direct = rep(c('D','M','U','U','M'), 6),
 stringsAsFactors = F)

Linking$Key <- paste(Linking$ID, Linking$PSU, Linking$qtr, sep='_')
Linking$Key[c(21:30)] <- c("87654_A15467_1", "45623_A23456_2", "67891_A12345_4", "65346_A23987_7", 
 "E3456782_A456321_6", "E3421986_A34564_8", "E9859873_A123456_9", "E3452_A12345_6", "R765498765_A455634_2", "54678_A12345_5")

Я хочу извлечь отдельные части переменной "Key", чтобы заполнить ID, PSU и qtr, где эти значения являются NA.

Я могу использовать этот код:

test <- filter(Linking, is.na(ID)) %>%
 select(Key)
 test2 <- data.frame(do.call(rbind, strsplit(test$Key, "_")), test$Key)
 names(test2) <- c("ID", "PSU", "qtr", "Key")

Чтобы извлечь информацию, которая мне нужна для ID, PSU и qtr, где есть значения NA. Но как добавить это обратно к исходному набору данных "Связывание"? Слияние не будет работать, потому что я получаю два значения для блока питания, ID и qtr (N и действительное значение)

Я задал аналогичный вопрос. Наполните значения NA в переменной со значениями из разных переменных в R, но этот вопрос включает значения переменной длины и включает в себя более полный набор данных с переменными, которые не только связаны с "ключом". Благодарю.

1 ответ

Вот один из подходов:

tmp <- data.frame(do.call(rbind, strsplit(Linking$Key, "_")), Linking$Key)
names(tmp) <- names(Linking)
tmp

Это работает с момента Linking$Key содержит все релевантные данные для создания вашего data.frame.

licensed under cc by-sa 3.0 with attribution.