*disclaimer
1228259
droplevels()
- factor型のデータ(カテゴリー変数)で、
- データ処理中に、使われないレベルが残ってしまった場合、
- 使われないレベルを削除する
例: PIDのうち20で始まるものだけを選んでサブセットを作る場合
元データ
tibble [414 × 3] (S3: tbl_df/tbl/data.frame) $ PID : Factor w/ 233 levels "1901","1902",..: 1 2 3 4 5 6 8 9 12 13 ... $ Year : Factor w/ 2 levels "JH","SH": 1 1 1 1 1 1 1 1 1 1 ... $ MSD_mean: num [1:414] 2.2 1.68 1.64 1.64 1.74 ...
20で始まる人だけを選ぶ
dplyr::filter(startsWith(as.character(PID), "20"))
- これだけやると以下のようになる
tibble [140 × 3] (S3: tbl_df/tbl/data.frame) $ PID : Factor w/ 233 levels "1901","1902",..: 76 77 78 79 80 81 82 83 85 86 ... $ Year : Factor w/ 2 levels "JH","SH": 1 1 1 1 1 1 1 1 1 1 ... $ MSD_mean: num [1:140] 1.66 1.73 1.7 1.77 1.7 ...
- PID: Factorに残ってしまっている
- 値はないので、データとしては存在しないのに、、、
PID Year MSD_mean 2002 : 2 JH:70 Min. :1.576 2003 : 2 SH:70 1st Qu.:1.718 2004 : 2 Median :1.768 2005 : 2 Mean :1.774 2006 : 2 3rd Qu.:1.830 2007 : 2 Max. :2.071 (Other):128
- これがトラブルのもとになるので、存在しないlevelを削除する
%>% mutate(PID=droplevels(PID))
df_both2 <- df_both %>% dplyr::filter(startsWith(as.character(PID), "20")) %>% mutate(PID=droplevels(PID))
- これで、構造もきれいになる。
str(df_both2) tibble [140 × 3] (S3: tbl_df/tbl/data.frame) $ PID : Factor w/ 70 levels "2002","2003",..: 1 2 3 4 5 6 7 8 9 10 ... $ Year : Factor w/ 2 levels "JH","SH": 1 1 1 1 1 1 1 1 1 1 ... $ MSD_mean: num [1:140] 1.66 1.73 1.7 1.77 1.7 ...
https://sugiura-ken.org/wiki/