Перекодирование значений нескольких переменных с одинаковым суффиксом в новую переменную с другим суффиксом в R

#r

Вопрос:

 library(Hmisc)
install.packages("expss")
col1.5pt <- c(1,2,4,5)
col2.5pt <- c(1,2,3,4)
col3 <- c(3,4,5,1)
col4.5pt <- c(2,3,2,4)
col5 <- c(3,NA,4,5)
df<- data.frame(col1.5pt,col2.5pt,col3,col4.5pt,col5)
abc <- c("col1.5pt", "col2.5pt", "col4.5pt")
cde <- c("col1.T2b", "col2.T2b", "col4.T2b")
df[cde]<-sapply(df[abc], function(x) recode(x,1:2~1,3~2,4:5~3))
 

Я должен в основном перекодировать переменные .5pt в .T2b. На данный момент я выбираю эти переменные, но так как у меня много наборов данных, в которых я должен создавать такие переменные. Мне нужно что-то, где я мог бы выбрать все переменные с помощью .5pt и перекодировать их в .T2b. Я новичок в R и пытаюсь научиться автоматизировать свой код. Заранее спасибо за помощь.

Ответ №1:

Если я правильно читаю, вы хотите назвать новые столбцы на основе существующих столбцов, заканчивающихся на «.5pt», а затем применить эту функцию к оригиналам, чтобы сформировать новый набор значений.

 abc <- grep("\.5pt$", names(df), value=TRUE) #create source column names
# use double escape "\." to match a period ; naked periods are regex wildcards

cde.new <- gsub("\.5pt$", ".T2b", abc)  # create destination names
# fortunately yoiu can use a vector of names on the LHS of `[.]<-`

df[cde.new] <- sapply(df[abc], function(x) recode(x,1:2~1,3~2,4:5~3))
df
#------------
  col1.5pt col2.5pt col3 col4.5pt col5 col1.T2b col2.T2b col4.T2b
1        1        1    3        2    3        1        1        1
2        2        2    4        3   NA        1        1        2
3        4        3    5        2    4        3        2        1
4        5        4    1        4    5        3        3        3
 

grep Функция использует обобщенные регулярные выражения для обработки векторов символьных значений. В режиме по умолчанию он принимает два аргумента, первый из которых представляет собой шаблон, определяющий правило сопоставления, а второй-рассматриваемый вектор. Он возвращает число, которое является относительным положением любого символьного значения в векторе. Когда value=TRUE вместо этого он возвращает фактические значения символов , а не их положение. Правила сопоставления для шаблона определены на странице справки R. ?regex gsub Функция (и sub function) match a pattern (first argument) and then substitutes new characters for the matched ones (second argument) within the vector given in the third argument. gsub does this at all positions matched while sub only does it at the first such position. Both grep and gsub details are described in the same R help page which can be found at ?grep`.

Комментарии:

1. О боже! Это действительно здорово. Спасибо. Не могли бы вы, пожалуйста, объяснить мне это?