2015-12-16 6 views
-6

У меня есть DT :: DataTable следующим образом:Удалить NA внутри колонны из Datafarme

Datatable я преобразовал таблицу данных для data.frame,

output$viewresponses<-DT::renderDataTable({ 
    view <- read.csv("www/kpi.csv", header=TRUE) 

    viewDF<-as.data.frame(view) 
    viewDF<-subset(viewDF,select=-c(X,used_shiny)) 
    print(viewDF %>% spread(name,r_num_years)) 

    DT::datatable(res %>% spread(name,r_num_years),extensions = 'Responsive') 

    } 

) data.frame выглядит следующим образом:

cost customer-satisfaction safety time 
1 NA   57    NA NA 
2 NA   72    NA NA 
3 NA   73    NA NA 
4 NA   NA    NA NA 
5 NA   NA    NA 24 
6 NA   NA    NA 40 
7 NA   NA    NA 22 
8 40   NA    NA NA 
9 38   NA    NA NA 
10 36   NA    NA NA 
11 NA   NA    32 NA 
12 NA   NA    30 NA 
13 NA   NA    58 NA 

Я хочу, чтобы удалить все NA и получить следующую таблицу

cost customer-satisfaction safety time 
    40   57    32  24 
    38   72    30  40 
    36   73    58  22 

и результат: Remove all NA from each column in a DT::datatable

Я изменил вопрос следующим образом: Существует кадр данных,

df<-`data.frame(cost=c(NA,NA,NA,1),time=c(NA,NA,3,NA),Quality=c(NA,4,NA,NA), 
    customersatisfaction=c(2,NA,NA,NA)`) 
cost time Quality customersatisfaction 
1 NA NA  NA     2 
2 NA NA  4     NA 
3 NA 3  NA     NA 
4 1 NA  NA     NA 

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

cost time Quality customersatisfaction 
1 1 3  4     2 
+6

Что бы полезность такого data.frame? И почему строка с 'satisf' равна' 81' исчезнет? –

+1

Вам нужно определить некоторые отношения, которые существуют в таблице, если вы хотите получить для этого настоящий R-код. –

+0

Странно, в этом вопросе нет строки '81'. –

ответ

3

Мы прокручиваем столбцы, удаляем элементы NA, затем выбираем минимальное количество наблюдений после сравнения всех элементов в list.

lst <- lapply(df1, function(x) x[complete.cases(x)]) 
res <- data.frame(lapply(lst, `length<-`,min(lengths(lst)))) 
res 
# cost customer.satisfaction safety time 
#1 40     57  32 24 
#2 38     72  30 40 
#3 36     73  58 22 
+0

спасибо, почему они дают мне отрицательный результат? – user

+0

@user Обновлено сообщение. Думаю, теперь это то же самое, что и ожидалось. – akrun

+13

@akrun Вы не только поощряете поток низкого качества, нулевые усилия на SO, ответив на них, вы также выдвигаете их ... («Я сейчас за вас»). Поздравляем с вашими повторениями! – Henrik

2

Если число NA с одинаково для всех столбцов, вы можете использовать na.omit.

data.frame(lapply(dat, na.omit)) 

где dat - название вашего флага данных.

Результат:

cost customer.satisfaction safety time 
1 40     57  32 24 
2 38     72  30 40 
3 36     73  58 22 
+0

, но что, если число NA равно или не одинаково в каждом столбце ? – user

+4

@user - Вы должны объяснить нам, что произойдет в этой ситуации, а не наоборот. Он должен быть частью вашего поста. –

 Смежные вопросы

  • Нет связанных вопросов^_^