Как удалить последний символ в значениях столбцов, если их длина больше определенной в R? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть данные под названием deseq.res. У него есть столбец под названием Gene. Я хочу удалить значения в этом столбце, если значение превышает 10 символов.

deseq.res

deseq.res<-structure(list(Gene = c("SS1G_0300902", "SS1G_024991", "SS1G_09248", 
"SS1G_09768"), sampleA = c("Healthy", "Healthy", "Healthy", "Healthy"
), sampleB = c("Infected", "Infected", "Infected", "Infected"
)), .Names = c("Gene", "sampleA", "sampleB"), row.names = c(NA, 
4L), class = "data.frame")

Результат, который я хочу:

        Gene sampleA  sampleB
SS1G_03009 Healthy Infected
SS1G_02499 Healthy Infected
SS1G_09248 Healthy Infected
SS1G_09768 Healthy Infected

код, который я пробовал:

Здесь у меня проблемы, тогда я мог бы просто использовать gsub или подстроку. Я могу сделать это более сложным способом, но я хотел использовать функцию, чтобы сделать это.

check.len<- function(x){if (length(deseq.res$Gene[x])>10) return (x)}
check.len(deseq.res$Gene)

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы можете использовать библиотеку (dplyr) и изменять:

library(dplyr)
deseq.res <- deseq.res %>% mutate(Gene = substr(Gene,1,10))
0 голосов
/ 16 ноября 2018

Мы можем использовать substr для извлечения первых 10-ти символьных подстрок данных

deseq.res$Gene <- substr(deseq.res$Gene, 1, 10)

В зависимости от функции OP, nchar вместо length

check.len <- function(x, n) ifelse(nchar(x) > n, substr(x, 1, n) , x)
check.len(deseq.res$Gene, n = 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...