#r
#r
Вопрос:
Я пытаюсь создать таблицу. Вот как это выглядит сейчас: я повторно привязываю имена столбцов к набору данных.
Можно ли заменить значение первой строки на класс # на «#», а класс #.1 на «%»?
итоговая таблица должна выглядеть следующим образом
образцы данных могут быть построены с использованием следующих кодов:
df<-structure(list(AEDECOD = c("Alanine aminotransferase increased",
"Aspartate aminotransferase increased"), `Grade 1` = 0:1, `Grade 1.1` = c("(0.00 %)",
"(5.26 %)"), `Grade 2` = 1:0, `Grade 2.1` = c("(5.26 %)", "(0.00 %)"
), `Grade 3` = c(0L, 0L), `Grade 3.1` = c("(0.00 %)", "(0.00 %)"
), Total = c(1, 1), Total.1 = c("(5.26 %)", "(5.26 %)")), row.names = 1:2, class = "data.frame")
Ответ №1:
Вы можете использовать регулярное выражение для идентификации столбцов и использовать его в across
:
library(dplyr)
df %>%
mutate(across(matches('(Grade \d $)|(^Total$)'), replace, 1, '#'),
across(matches('(Grade \d \.\d $)|(Total\.\d )'), replace, 1, '%'))
# AEDECOD Grade 1 Grade 1.1 Grade 2
#1 AEDECOD # % #
#2 Alanine aminotransferase increased 0 (0.00 %) 1
#3 Aspartate aminotransferase increased 1 (5.26 %) 0
# Grade 2.1 Grade 3 Grade 3.1 Total Total.1
#1 % # % # %
#2 (5.26 %) 0 (0.00 %) 1 (5.26 %)
#3 (0.00 %) 0 (0.00 %) 1 (5.26 %)
данные
df <- rbind(names(df),df)
Ответ №2:
это также подойдет
df <- rbind(colnames(df), df)
library(stringr)
df[1,] <- str_replace(str_replace(df[1,], "(Grade \d $)|(^Total$)", "#"), "(Grade \d \.\d $)|(Total\.\d )", "%")
> df
AEDECOD Grade 1 Grade 1.1 Grade 2 Grade 2.1 Grade 3 Grade 3.1 Total Total.1
1 AEDECOD # % # % # % # %
2 Alanine aminotransferase increased 0 (0.00 %) 1 (5.26 %) 0 (0.00 %) 1 (5.26 %)
3 Aspartate aminotransferase increased 1 (5.26 %) 0 (0.00 %) 0 (0.00 %) 1 (5.26 %