-6

我有一个 DT::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

结果是: 从 DT::datatable 中的每一列中删除所有 NA

我将问题修改如下:有一个数据框,

 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
4

2 回答 2

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
于 2015-12-16T06:16:32.497 回答
2

如果NA所有列的 s 数相同,则可以使用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
于 2015-12-16T07:23:38.893 回答