добавление или вставка имен в имена столбцов в R - PullRequest
6 голосов
/ 06 ноября 2011

У меня есть файл с разделителями табуляции с 400 столбцами. Теперь я хочу добавить текст к именам столбцов. То есть, если есть имя столбца A и B, я хочу изменить A на A.ovca и B на B. ctrls.Как я хочу добавить тексты (ovca и ctrls) к 400 coulmns. Некоторые имена столбцов с ovca, а некоторые с ctrls. Все столбцы уникальны и содержат более 1000 строк. Дается пример кода файла delim ниже:

         X             Y         Z               A       B               C  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90

И я хочу, чтобы файл выглядел так:

       X.ovca     Y.ctrls      Z.ctrls       A.ovca     B.ctlrs       C.ovca  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90

Пожалуйста, помогите мне

С уважением Thileepan

Ответы [ 3 ]

6 голосов
/ 06 ноября 2011

Если ваш data.frame называется dat, вы можете получить доступ (и записать) к именам столбцов с помощью colnames(dat).

Следовательно:

cn <- colnames(dat)
cn <- sub("([AXC])","\\1.ovca",cn)
cn <- sub("([YZB])","\\1.ctrls",cn)
colnames(dat) <- cn

> cn
[1] "X.ovca"  "Y.ctrls" "Z.ctrls" "A.ovca"  "B.ctrls" "C.ovca" 

\\1 называется обратным замещением в вашем регулярном выражении.Он заменит \\1 на все, что находится внутри скобок в шаблоне.Поскольку внутри скобок у вас есть скобка, она будет соответствовать любой из букв внутри.В этом случае «A» становится «A.ovca», а «X» становится «X.ovca».

Если имена переменных имеют более одной буквы, их достаточно легко расширить;просто посмотрите немного на регулярные выражения.

5 голосов
/ 07 ноября 2011

Вот два лайнера с пакетом stringr.

nam <- names(mydf)
names(mydf) <- ifelse(nam %in% c('X', 'A', 'Z'), 
   str_c(nam, '.ovca'),  str_c(nam, '.ctrls'))
3 голосов
/ 06 ноября 2011

Как насчет этого?Вы в основном находите столбцы, к которым хотите добавить "ovca" и "ctrls", используя %in%, и добавьте соответствующий тег.

> (mydf <- data.frame(X = runif(10), Y = runif(10), Z = runif(10), A = runif(10), B = runif(10), C = runif(10)))
            X         Y         Z         A         B         C
1  0.81030594 0.1624974 0.3977381 0.9619541 0.9866498 0.4424760
2  0.92498687 0.2069429 0.6065115 0.9969835 0.2407364 0.2455184
3  0.11033869 0.2878640 0.5662793 0.7936232 0.6066735 0.8210634

> names(mydf)[names(mydf) %in% c("X", "A", "C")] <- paste(names(mydf)[names(mydf) %in% c("X", "A", "C")], "ovca", sep = ".")
> names(mydf)[names(mydf) %in% c("Y", "Z", "B")] <- paste(names(mydf)[names(mydf) %in% c("Y", "Z", "B")], "ctrls", sep = ".")
> mydf
       X.ovca   Y.ctrls   Z.ctrls    A.ovca   B.ctrls    C.ovca
1  0.81030594 0.1624974 0.3977381 0.9619541 0.9866498 0.4424760
2  0.92498687 0.2069429 0.6065115 0.9969835 0.2407364 0.2455184
3  0.11033869 0.2878640 0.5662793 0.7936232 0.6066735 0.8210634
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...