我有一个这样的数据框:
idx type val1 val2 val3 val4 val5 val6
1 a 0.2 NA NA NA NA NA
2 a 0.3 NA NA NA NA NA
3 a 0.2 NA NA NA NA NA
4 a NA 0.3 NA NA NA NA
5 a NA 0.5 NA NA NA NA
6 a NA 0.2 NA NA NA NA
7 a NA NA 0.2 NA NA NA
8 a NA NA 0.5 NA NA NA
9 a NA NA 0.4 NA NA NA
10 a NA NA NA 0.4 NA NA
11 a NA NA NA 0.6 NA NA
12 a NA NA NA 0.6 NA NA
.
.
.
34 b NA NA NA NA NA 0.6
35 b NA NA NA NA NA 0.4
36 b NA NA NA NA NA 0.3
我想要合并行并删除NA。所以这就是我想要实现的目标:
idx type val1 val2 val3 val4 val5 val6
1 a 0.2 0.3 0.2 0.4 0.3 0.2
2 a 0.3 0.5 0.5 0.6 0.4 0.5
3 a 0.2 0.2 0.4 0.6 0.5 0.6
4 b 0.4 0.2 0.2 0.5 0.4 0.6
5 b 0.3 0.5 0.6 0.3 0.6 0.4
6 b 0.3 0.4 0.3 0.6 0.5 0.3
答案 0 :(得分:0)
您可能只想将一个函数应用于每个感兴趣的列,然后将其cbind到已过滤的类别列:
test.df = data.frame(cat = rep(c('a','b'), each=3),x1=c(1,NA,NA,5.5,NA,NA),
x2=c(NA,2,NA,NA,4.5,NA),
x3=c(NA,NA,3.,NA,NA,3.5))
collapse_column <- function(data, col){
data[!is.na(data[,col]),col]
}
main_vals = sapply(2:4,collapse_column, data=test.df)
cat_vals = test.df[!is.na(test.df[,2]),'cat']
new_df = as.data.frame(cbind(cat_vals, main_vals))
names(new_df) = names(test.df)