Как заменить указанные c строки на условия в R? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть данные, где я сжал результаты дубликата гена, чтобы каждый был в 1 строке. Это привело к заполнению некоторых строк запятыми. Я пытаюсь заменить строки, содержащие только запятые, на NA. Однако у меня также есть строки с запятыми и качественными данными, которые я пытаюсь сохранить. Например:

Gene     Condition
Gene1    Name=Asymmetrical dimethylarginine level, Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker
Gene2    Name=blood pressure, Name=diabetes
Gene3    Name=heart disease, , , , , 
Gene4    , , , , , , , , ,
Gene5    NA
Gene6    , , ,

Ожидаемый результат:

Gene     Condition
Gene1    Name=Asymmetrical dimethylarginine level, Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker
Gene2    Name=blood pressure, Name=diabetes
Gene3    Name=heart disease, , , , , 
Gene4    NA
Gene5    NA
Gene6    NA
#ideally I would get rid of Gene3's extra commas but this is not necessary

Я пытаюсь закодировать такой оператор, как «если в столбце условия есть только запятые, заменить на NA», и пытаясь сделать это с помощью оператора вроде data$Condition[ if("," & ![A-Z]|[a-z]|[=]) ] <- "NA", но я не уверен, как правильно понять синтаксис или если это будет работать для всех строк только с запятыми, но количество запятых варьируется - я новичок в R, так что любое руководство будет быть оцененным.

Пример данных:

DF <-
structure(list(Gene = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5", 
"Gene6"), Condition = c("Name=Asymmetrical dimethylarginine leve,l Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker", 
"Name=blood pressure, Name=diabetes", "Name=heart disease, , , , ,", 
", , , , , , , , ,", NA, "Name=kidney disease, , ,")), 
row.names = c(NA, -6L), class = "data.frame")

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Если я вас правильно понял, вы можете попробовать это для удаления запятых, если ячейка содержит только запятые

DF$condition <- gsub('^(,\\s*)+$',NA, DF$Condition)

Однако, если вы хотите удалить только запятые и заменить все ячейки запятых на NA, тогда вы можно попробовать:

DF$condition <- gsub('^$', NA, gsub('(,\\s*)+$','', DF$Condition))

1-й выход:

> gsub('^(,\\s*)+$',NA, DF$Condition)
[1] "Name=Asymmetrical dimethylarginine leve,l Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker"
[2] "Name=blood pressure, Name=diabetes"                                                                                                      
[3] "Name=heart disease, , , , ,"                                                                                                             
[4] NA                                                                                                                                        
[5] NA                                                                                                                                        
[6] "Name=kidney disease, , ," 

2-й выход :

> gsub('^$', NA, gsub('(,\\s*)+$','', DF$Condition))
[1] "Name=Asymmetrical dimethylarginine leve,l Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker"
[2] "Name=blood pressure, Name=diabetes"                                                                                                      
[3] "Name=heart disease"                                                                                                                      
[4] NA                                                                                                                                        
[5] NA                                                                                                                                        
[6] "Name=kidney disease" 
0 голосов
/ 18 февраля 2020

Вы можете попробовать grepl, как показано ниже, где строки с , будут установлены на NA

DF <- within(DF,Condition <-replace(Condition,!grepl("[[:alnum:]]",Condition),NA))
0 голосов
/ 18 февраля 2020

Опция

grepl(pattern= "^[ ,]+$")
Когда в строке, содержащей только пробел и запятую, эта функция вернет TRUE.

DF <-
structure(list(Gene = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5", 
"Gene6"), Condition= c("Name=Asymmetrical dimethylarginine leve,l Name=Bipolar disorder and schizophrenia, Name=3-hydroxypropylmercapturic acid levels in smoker", 
"Name=blood pressure, Name=diabetes", "Name=heart disease, , , , ,", 
", , , , , , , , ,", NA, "Name=kidney disease, , ,")), 
row.names = c(NA, -6L), class = "data.frame")

DF[which(grepl("^[ ,]+$",DF$Condition)==T),2]<-NA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...