🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

15903閲覧

Rで「'x' は数値でなければなりません」というエラーが出てしまう

Keita222

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2019/12/17 12:16

編集2019/12/19 09:13

前提・実現したいこと

Rで、「'x' は数値でなければなりません」と出てしまいます。
この場合では点双列相関係数を数値として出したいのですが、どうしたらこのエラーが解消されるでしょうか?
コード中の、行列の表示が分かりづらくて申し訳ございません。
読み込むファイルの中身を分かりやすく表すと、

(header) 投手の名前 投手の名前 投手の名前 …
打者のID    0.0         0.3333333
打者のID          0.5    0.0
打者のID    0.0

というような行列になっています。
これらの数値はその打者がその投手との対戦での打率を表しています。対戦のない場合は空白になっています。
非常に困っています。
分かる方教えてくれるとありがたいです。

追記(解決)
上記の件は解決しましたが、1行目1列目を削除したデータの中身を確認したところ、数値が変わってしまっていました。確率を表しているのでほんとは0~1の間でないといけないのですが、2や3や11などという数値になっていました。元々データがなかった部分は全て1になっています。
元々の数値に戻すにはどうしたらいいでしょう?

追記
出力はできましたが、結果が全てNAになってしまいました…。
元々のデータはほとんどが欠損値なのですが、それを含めた上で計算するようにすることは可能でしょうか?
分かる方いらしたら教えてください!お願いします。

追記
as.vectorをつけた場合とつけなかった場合では何が違うのでしょうか?

発生している問題・エラーメッセージ

'x' は数値でなければなりません

該当のソースコード

> u <- read.csv("ファイル名.csv",header=FALSE) > head(u) V1 V2 V3 V4 V5 1 J.C. Ramirez Mike Clevinger Jose Alvarez Tyler Olson 2 lindf001 0.0 3 kipnj001 0.0 0.0 4 ramij003 0.0 5 cozaz001 0.3333333333333333 6 troum001 0.0 V6 V7 V8 V9 V10 1 Luke Bard Nick Goody Noe Ramirez Zach McAllister Matt Belisle 2 0.5 0.0 0.5 3 0.0 0.0 0.6666666666666666 4 0.0 1.0 0.5 5 0.0 1.0 0.0 6 0.0 0.0 V11 V12 V13 V14 V15 V16 1 Garrett Richards Josh Tomlin Dan Otero Jim Johnson Blake Parker Blake Wood 2 0.0 0.0 0.5 0.0 3 0.0 0.0 0.0 4 0.5 0.0 0.0 0.0 5 0.0 0.0 6 0.5 0.0 V17 V18 V19 V20 1 Tyler Skaggs Corey Kluber Cam Bedrosian Keynan Middleton 2 0.6666666666666666 0.0 3 0.5 1.0 0.0 4 0.0 0.0 5 0.0 6 0.0 V21 V22 V23 V24 1 Andrew Miller Cody Allen Parker Bridwell Daniel Gossett 2 3 4 5 0.0 0.6666666666666666 6 0.0 0.0 …続く > (r <- as.vector(cor(rowSums(u),u))) #点双列相関係数 rowSums(u) でエラー: 'x' は数値でなければなりません

試したこと

1行目の投手名と1列目の選手IDを削除して、数値と空欄のみにして上記のように実行してみましたが、同じエラーが出ました。

補足情報(FW/ツールのバージョンなど)

Rのバージョンは3.5.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2019/12/17 13:30

> 1行目の投手名と1列目の選手IDを削除して どのようにして「削除」しましたか?
Keita222

2019/12/17 13:42

> u1 <- u[-1,-1] これで削除しました。
guest

回答1

0

ベストアンサー

入力データの先頭に文字列が入っているため、数値に見える項目もすべて文字列として取り扱われ、データフレームuの中ではfactorとなっているはずです。そうなった後に1列目/1行目をただ除去しても、残りは非数値のままなので計算できません。

例えばこんな感じで、要素を数値化すればエラーなく結果が得られると思います。

u2 <- data.frame(lapply(u[-1,-1], as.numeric)) rowSums(u2)

投稿2019/12/18 06:34

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Keita222

2019/12/18 06:59

ありがとうございました!おかげで解決しました! 感謝申し上げます。
Keita222

2019/12/18 09:49

すいません、1行目1列目を削除したデータの中身を確認したところ、数値が変わってしまっていました。確率を表しているのでほんとは0~1の間でないといけないのですが、2や3や11などという数値になっていました。元々データがなかった部分は全て1になっています。 どうしたらいいでしょう?
KojiDoi

2019/12/18 10:59

factorを経由している影響でしょう。factorは内部的には番号で管理されているのでそれが数値化されてしまったのだと思います。 スクリプト中ではfactorはいろいろ変な影響を与えるので使いにくいです。read.tableでデータを読み込む際にStringsAsFactors=Fをつけてみてください。
Keita222

2019/12/18 12:46

すみません、どういう風に書いたらいいですか? > u <- read.table("2018ALLdatasetAVG.csv",header=F, sep=",", StringsAsFactors=F) このようにするとできないみたいです…。 使われていない引数 (StringsAsFactors = FALSE) とのエラーが出てしまいました。
KojiDoi

2019/12/18 13:31

すみません、stringsAsFactorsでした。(先頭が小文字)
Keita222

2019/12/19 01:25

出力はできましたが、結果が全てNAになってしまいました…。 元々のデータはほとんどが欠損値なのですが、それを含めた上で計算するようにすることは可能でしょうか?
KojiDoi

2019/12/19 04:38

手順としては説明したとおりに「普通に」処理すればできるはずですが。データの中間処理で何か拙いことをなさっていると思いますが、そこは見せていただかないと何とも。
Keita222

2019/12/19 05:34 編集

u <- read.csv("2018ALLdatasetAVG.csv",header=FALSE,stringsAsFactors=F) u2 <- data.frame(lapply(u[-1,-1], as.numeric)) (r <- as.vector(cor(rowSums(u2),u2))) このような順番で行いました。何かおかしい点などはありますか?
KojiDoi

2019/12/19 06:07

行中に一つでもNAが含まれていると計算結果がNAになってしまいますね。次のようにすればどうでしょう。 r <- as.vector(cor(rowSums(u2, rm.na=T),u2))
Keita222

2019/12/19 06:18

rowSums(u2, rm.na = T) でエラー: 使われていない引数 (rm.na = T) と出てしまいました…。
KojiDoi

2019/12/19 07:03

na.rmでした。度々申し訳ない。 なおパラメータなどは?rowSumsとかで調べられるので、人の言っていることを鵜呑みにせずに、ご自身でもチェックしてください。
Keita222

2019/12/19 09:08 編集

r <- rowSums(u2,na.rm = TRUE) これなら出るのですが、 r <- as.vector(cor(rowSums(u2, na.rm=T),u2)) これではNAしか出ないですね…。 vectorなのでおそらくベクトル化しているのでしょうが、それと何か関係しているのですかね…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問