2016-02-12 8 views
-2

У меня есть набор данных, который выглядит следующим образом:Как удалить часть столбцов, которая включает в себя NA

ID1  x1 x2 
200  10 NA 
200  12 NA 
200  13 NA 
200  NA 17 
200  NA 16 
200  NA 19 

Я хотел бы, чтобы удалить часть столбца, NA, то я буду иметь выход как это

ID1 x1 x2 
200 10 17 
200 12 16 
200 13 19 

Как это сделать в R?

+0

Значения всегда должны смещаться вверх, если ID1 одно и то же. поэтому значения находятся в правильных столбцах, но мне хотелось бы заменить tha NA в x2 на значения ниже, если ID1 - то же самое. Я не уверен, что это возможно. – research111

+0

Должно ли 2 в столбце x1 быть 13? –

+2

В случае, если 2 по ошибке вы можете попробовать 'library (dplyr); df%>% group_by (ID1)%>% mutate_each (funs (. [order (is.na (.), na.last = FALSE)]))%>% ungroup()%>% filter (rowSums (! is .na (. [- 1]))> 0) ' –

ответ

3

Мы можем сделать это с помощью data.table. Но мы должны понимать, что OP предоставил минимальный пример, где элементы NA одинаковы как в столбцах «x1», так и «x2». Если это не так, это не сработает.

Мы преобразуем 'data.frame' в 'data.table' (setDT(df1)), сгруппированные по 'ID', мы перебираем другие столбцы и удаляем элементы NA с помощью na.omit.

library(data.table) 
setDT(df)[, lapply(.SD, na.omit) , by = ID1] 
# ID1 x1 x2 
#1: 200 10 17 
#2: 200 12 16 
#3: 200 13 19 
1

Основание R:

# remove NAs and leave in list of vectors 
xclean <- apply(x[2:3],MARGIN = 2,na.omit) 

# chance to write code to handle different length vectors 

# put in dataframe 
data.frame(ID1 = 200,xclean) 
Смежные вопросы