Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
FACTOR型の注意点
Hiroki. K
Factor型について
 水準(Levels)がある変数
 デフォルト設定でData.Frameをつくる場合、文字列はFactorとなる
(例) > ans <- data.frame(result=c('yes', 'no', 'yes'...
Factor型の操作が必要になる場合
 水準を任意の順に設定する(デフォルトはアルファベット順)
例1: yes、noの順になるようにData.Frameをつくる
> ans <- data.frame(result=c('yes', 'no...
【準備】以降で使うデータ①
#サンプルデータ: 1週間の曜日と値
> set.seed(123)
> data <- data.frame(day = c('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 's...
【準備】以降で使うデータ②
#サンプルデータ: 数値にエラーが入る場合
> data$valError <- c('error', data$val[-1])
> str(data)
'data.frame': 7 obs. of 4 vari...
【準備】以降で使うデータ③
#サンプルデータ: 曜日の水準の並べ替え⇒曜日順にする
> data$daySorted <- factor(data$day, levels=data$day)
#data$daySorted <- factor(...
【準備】以降で使うデータ④
#サンプルデータ: 一旦CSVで保存して再度読み込む
> write.csv(data, 'data.csv', row.names=F)
> data1 <- read.csv('data.csv')
> data...
【準備】以降で使うデータ⑤
#ここまでで準備したもの
day val daySorted valError
mon 0.6204 mon error
tue 0.6121 tue 0.6121
wed -0.1623 wed -0.1623
t...
Factorの並び替え
 デフォルトはアルファベット順
例2: dataのday, valをグラフ化
そのままグラフ化する場合:
> ggplot(data, aes(x=day, y=val)) +
geom_bar(stat='ident...
Factorの並び替え
 水準を任意の順に設定する
例3: dataのdaySorted, valをグラフ化
> ggplot(data, aes(x=day, y=valSorted)) +
geom_bar(stat='identity'...
Factorに異常値が混入している場合
 まずは異常値が混入していない場合
例3: dataのdaySorted, valをグラフ化(再掲)
> ggplot(data, aes(x=day, y=valSorted)) +
geom_bar...
Factorに異常値が混入している場合
 次に異常値(error)が混入している場合
例4: dataのdaySorted, valErrorをグラフ化
> ggplot(data,
aes(x=daySorted,
y=as.numeric...
Factorに異常値が混入している場合
 異常値(error)が混入しているデータを再読み込みする
例4: data1のdaySorted, valErrorをグラフ化
> ggplot(data1,
aes(x=daySorted,
y=a...
Factorに異常値が混入している場合
data valに欠損値 保存・再読み込み data1
as.numeric(val) as.numeric(val)
そのまま数値化できない
Factorに異常値が混入している場合
data valに欠損値 保存・再読み込み data1
as.numeric(val) as.numeric(as.character(val))
一回文字列に直してから数値化
Upcoming SlideShare
Loading in …5
×

Factor型の注意点

2,121 views

Published on

異常値が混入したデータを読み込むときの注意点

Published in: Technology
  • Be the first to comment

Factor型の注意点

  1. 1. FACTOR型の注意点 Hiroki. K
  2. 2. Factor型について  水準(Levels)がある変数  デフォルト設定でData.Frameをつくる場合、文字列はFactorとなる (例) > ans <- data.frame(result=c('yes', 'no', 'yes')) > str(ans) 'data.frame': 3 obs. of 1 variable: $ result: Factor w/ 2 levels "no","yes": 2 1 2 水準(Levels) 順位 no 1 yes 2 result 1 2 1 ans =
  3. 3. Factor型の操作が必要になる場合  水準を任意の順に設定する(デフォルトはアルファベット順) 例1: yes、noの順になるようにData.Frameをつくる > ans <- data.frame(result=c('yes', 'no', 'yes'), levels=('yes', 'no')) > str(ans) 'data.frame': 3 obs. of 1 variable: $ result: Factor w/ 2 levels “yes",“no": 1 2 1
  4. 4. 【準備】以降で使うデータ① #サンプルデータ: 1週間の曜日と値 > set.seed(123) > data <- data.frame(day = c('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'), val = rnorm(7)) > str(data) 'data.frame': 7 obs. of 2 variables: $ day: Factor w/ 7 levels "fri","mon","sat",..: 2 6 7 5 1 3 4 $ val: num 0.78 1.456 -0.644 -1.553 -1.598 ...
  5. 5. 【準備】以降で使うデータ② #サンプルデータ: 数値にエラーが入る場合 > data$valError <- c('error', data$val[-1]) > str(data) 'data.frame': 7 obs. of 4 variables: $ day: Factor w/ 7 levels "fri","mon","sat",..: 2 6 7 5 1 3 4 $ val: num 0.62 0.612 -0.162 0.812 2.197 ... $ daySorted: Factor w/ 7 levels "mon","tue","wed",..: 1 2 3 4 5 6 7 $ valError: chr "error" "0.612123492650849" "-0.162310976918126" ...
  6. 6. 【準備】以降で使うデータ③ #サンプルデータ: 曜日の水準の並べ替え⇒曜日順にする > data$daySorted <- factor(data$day, levels=data$day) #data$daySorted <- factor(data$day, levels=c(‘mon’, ‘tue’, ‘wed’, ‘thu’, ‘fri’, ‘sat’, ‘sun’))と同じ > str(data) 'data.frame': 7 obs. of 4 variables: $ day: Factor w/ 7 levels "fri","mon","sat",..: 2 6 7 5 1 3 4 $ val: num 0.62 0.612 -0.162 0.812 2.197 ... $ daySorted: Factor w/ 7 levels "mon","tue","wed",..: 1 2 3 4 5 6 7
  7. 7. 【準備】以降で使うデータ④ #サンプルデータ: 一旦CSVで保存して再度読み込む > write.csv(data, 'data.csv', row.names=F) > data1 <- read.csv('data.csv') > data1$daySorted <- factor(data1$daySorted, levels=data1$daySorted) > str(data1) 'data.frame': 7 obs. of 4 variables: $ day: Factor w/ 7 levels "fri","mon","sat",..: 2 6 7 5 1 3 4 $ val: num 0.62 0.612 -0.162 0.812 2.197 ... $ daySorted: Factor w/ 7 levels "mon","tue","wed",..: 1 2 3 4 5 6 7 $ valError: chr "error" "0.612123492650849" "-0.162310976918126" ...
  8. 8. 【準備】以降で使うデータ⑤ #ここまでで準備したもの day val daySorted valError mon 0.6204 mon error tue 0.6121 tue 0.6121 wed -0.1623 wed -0.1623 thu 0.8119 thu 0.8119 fri 2.1968 fri 2.1968 sat 2.0492 sat 2.0492 sun 1.6324 sun 1.6324 data = 保存・再読み込み day val daySorted valError mon 0.6204 mon error tue 0.6121 tue 0.6121 wed -0.1623 wed -0.1623 thu 0.8119 thu 0.8119 fri 2.1968 fri 2.1968 sat 2.0492 sat 2.0492 sun 1.6324 sun 1.6324 data1 = chr num factor chr chr num factor factor
  9. 9. Factorの並び替え  デフォルトはアルファベット順 例2: dataのday, valをグラフ化 そのままグラフ化する場合: > ggplot(data, aes(x=day, y=val)) + geom_bar(stat='identity') + theme_bw()
  10. 10. Factorの並び替え  水準を任意の順に設定する 例3: dataのdaySorted, valをグラフ化 > ggplot(data, aes(x=day, y=valSorted)) + geom_bar(stat='identity') + theme_bw() 曜日順になっている ⇒
  11. 11. Factorに異常値が混入している場合  まずは異常値が混入していない場合 例3: dataのdaySorted, valをグラフ化(再掲) > ggplot(data, aes(x=day, y=valSorted)) + geom_bar(stat='identity') + theme_bw()
  12. 12. Factorに異常値が混入している場合  次に異常値(error)が混入している場合 例4: dataのdaySorted, valErrorをグラフ化 > ggplot(data, aes(x=daySorted, y=as.numeric(valError))) + geom_bar(stat='identity') + theme_bw() as.numericで異常値分が欠損になる(NAに強制変換)
  13. 13. Factorに異常値が混入している場合  異常値(error)が混入しているデータを再読み込みする 例4: data1のdaySorted, valErrorをグラフ化 > ggplot(data1, aes(x=daySorted, y=as.numeric(valError))) + geom_bar(stat='identity') + theme_bw() as.numericでFactorの順位が数値化されてしまう
  14. 14. Factorに異常値が混入している場合 data valに欠損値 保存・再読み込み data1 as.numeric(val) as.numeric(val) そのまま数値化できない
  15. 15. Factorに異常値が混入している場合 data valに欠損値 保存・再読み込み data1 as.numeric(val) as.numeric(as.character(val)) 一回文字列に直してから数値化

×