2017-11-01 5 views
0

私のデータセットの例は、明らかなパターンのNAsのために5ではなく10行です。多数のNAsを持つ長いデータの行を折りたたみます

このようなデータセットを10行から5列に折りたたむ効率的な方法は何ですか?

df <- structure(list(variable = c("am", "am", "carb", "carb", "cyl", 
"cyl", "disp", "disp", "drat", "drat"), mean_stat = c(0.40625, 
NA, 2.8125, NA, 6.1875, NA, 230.721875, NA, 3.5965625, NA), sd_stat = c(NA, 
0.498990917235846, NA, 1.61519997763185, NA, 1.78592164694654, 
NA, 123.938693831382, NA, 0.534678736070971)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L), .Names = c("variable", 
"mean_stat", "sd_stat")) 

答えて

2

あなたはほぼ確実に問題を上流に対処する必要があります。私は悪い転置操作の結果として、このような出力を見てきました。

library(tidyr) 

df %>% 
    gather(key = "var", value = "val", mean_stat, sd_stat) %>% 
    drop_na %>% 
    spread(var, val) 
+0

はあなたに@Stanwoodありがとう:。

は、NAのはtidyrパッケージを使用して除去することができると述べました私はそれがより上流に処理されることに同意するが、これはデータが到着した状態である。 – Joe

3

あなたは各変数のために最初の非NA値を取るようにしたいと仮定します

df %>% group_by(variable) %>% summarise_all(~ first(na.omit(.))) 

# A tibble: 5 x 3 
# variable mean_stat  sd_stat 
#  <chr>  <dbl>  <dbl> 
#1  am 0.406250 0.4989909 
#2  carb 2.812500 1.6152000 
#3  cyl 6.187500 1.7859216 
#4  disp 230.721875 123.9386938 
#5  drat 3.596563 0.5346787 
関連する問題