Удалить строки в кадре данных с фактором "" - PullRequest
9 голосов
/ 17 августа 2011

У меня есть такой фрейм данных, как x, где гены столбцов являются фактором.Я хочу удалить все строки, где гены столбцов не имеют ничего.Поэтому в таблице XI я хочу удалить строку 4. Есть ли способ сделать это для большого кадра данных?

X 
names   values   genes
1 A  0.2876113  EEF1A1 
2 B  0.6681894   GAPDH
3 C  0.1375420 SLC35E2
4 D -1.9063386        
5 E -0.4949905   RPS28

Окончательный результат:

X 
names   values   genes
1 A  0.2876113  EEF1A1 
2 B  0.6681894   GAPDH
3 C  0.1375420 SLC35E2
5 E -0.4949905   RPS28

Спасибо всем!

Ответы [ 2 ]

24 голосов
/ 17 августа 2011

Из вашего вопроса не совсем очевидно, что такое пустые значения, но вы должны быть в состоянии принять решение ниже (здесь я предполагаю, что «пустые» значения являются пустыми строками):

toBeRemoved<-which(X$genes=="")
X<-X[-toBeRemoved,]
10 голосов
/ 17 августа 2011

@ Ник Саббе дал отличный ответ, но у него есть одно предупреждение:

Использование -which(...) - это отличный способ (иногда) ускорить операцию поднабора, когда нужно удалить только несколько элементов.

... Но если нет элементов , которые нужно удалить, это не удастся!

Итак, если X$genes не содержит пустых строк, which вернет пустой целочисленный вектор. Отрицание это все еще пустой вектор. И X [integer (0)] возвращает пустой data.frame!

toBeRemoved <- which(X$genes=="")
if (length(toBeRemoved>0)) { # MUST check for 0-length
    X<-X[-toBeRemoved,]
}

Или, если увеличение скорости не важно, просто:

X<-X[X$genes!="",]

Или, как указал @nullglob,

subset(X, genes != "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...