从 Dataframe 中删除列中的 NA

Remove NA inside column from Datafarme

我有一个 DT::datatable 如下:

我将数据 table 转换为 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 并得到以下 table

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

结果是:

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

 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 table 并得到以下结果:

  cost time Quality customersatisfaction
1    1    3       4                    2

我们遍历列,删除 NA 元素,然后在比较 list 中的所有元素后 select 最小观察数。

 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

如果所有列的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