とある技術者の徒然草

生産技術者の適当な日記(統計言語Rに関するメモがメイン)

【R言語】dplyrなどデータ整形メモ(NAが一定割合以下の列を抽出など)

データ整形に関する関数のメモ


仕事で使用した関数のメモです。

・NAが一定割合以下の列を抽出

tmp <- df %>%
  summarise_all( . %>% is.na() %>% sum) %>% #列ごとのNAの総数を集計する
  gather() %>%  #縦持ちに変換
  filter( value < nrow(df) *.3 ) #NAが30%以下の列を抽出

df2 <-df %>%
  select(tmp$key)


・数値だけround関数を適用して小数点切り上げ

df %>% 
  mutate_if(is.numeric, round, digits=0) -> df2

df %>% select(-N) %>% 
  spread(key=tech , value = syoricount) %>% 
  mutate_all(funs(ifelse(is.na(.),0,.))) %>%        #naを0に置換
  mutate_if(is.numeric, round, digits=0)->df_spread #roundで切り上げ

・列V1から4文字抜き出す

df %>% 
  dplyr::mutate(V2 = substring(V1,1,4) ) ->df2

・列V2に対して文字の一致判定

df2 %>% 
  mutate(V3 = recode(V2, XXXX ="XXX1",YYYY ="YYY2" )) ->df3

・データフレーム中のNAを置換するシンプルな方法

df[is.na(df)] <- 0.01

・列名の全角カッコを半角にする

df %>%
  setNames(stri_trans_nfkc(names(.))) %>%
  head(.)

・#分散が0以外の列を選択

data("airquality")
data_ar <- airquality
data_ar[,apply(data_ar,2,var,na.rm = TRUE) != 0]