我有一个DT :: datatable如下:
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
我修改了以下问题: 有一个数据框,
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
答案 0 :(得分: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
答案 1 :(得分: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