Добавление или вставка имен в имена столбцов в R
У меня есть файл с разделителями табуляции с 400 столбцами. Теперь я хочу добавить текст к именам столбцов. То есть, если есть имя столбца A и B, я хочу изменить A на A.ovca и B на B.ctrls.Like мудро, я хочу добавить тексты (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
Пожалуйста, помогите мне
С уважением, Тилипан
3 ответа
Вот два лайнера с использованием stringr
пакет.
nam <- names(mydf)
names(mydf) <- ifelse(nam %in% c('X', 'A', 'Z'),
str_c(nam, '.ovca'), str_c(nam, '.ctrls'))
Если у вас 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".
Если ваши имена переменных больше чем одна буква, достаточно легко расширить; просто посмотрите немного на регулярные выражения.
Как насчет этого? Вы в основном находите столбцы, к которым хотите добавить "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