Rで計算する際に文字列を含んでいる列があるため計算に失敗する
csvファイルを読み込んで平均などを計算して出力しようとしています。
文字列を含んでいる3列目があるたけ、計算に失敗します。回避方法はありませんでしょうか。
(なお、文字列を含んでいる場合は、個数を数えたいです)
元ファイル
Test1.csv
1,2,hogehoge,3,4
2,3,hogehoge,4,5
4,5,,4,5
5,6,halohalo,4,6
実行するスクリプト
my_mode <- function(x) {
names(which.max(table(x)))
# as.integer(names(which.max(table(x))))
}
methods <- c('mean', 'median', 'my_mode', )
a <- read.csv("Test1.csv")
result <- sapply(methods, function(method) {
sapply(a, function(column) {
do.call(method, list(column))
})
})
write.csv(result, file='Stat2.csv')
実行結果
警告メッセージ:
In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'Test1.csv'
以下にエラー median.default(c(3L, 1L, 2L)) : need numeric data
Calls: sapply ... lapply -> FUN -> do.call -> median -> median.default
追加情報: 警告メッセージ:
In mean.default(c(3L, 1L, 2L)) :
引数は数値でも論理値でもありません。NA 値を返します
実行が停止されました
期待する結果
,mean,median,my_mode,count
X1,3.666666667,4,2,5
X2,4.666666667,5,3,5
X,NA,NA,NULL,3
X3,4,4,4,5
X4,5.333333333,5,5,5