質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
R

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

Q&A

解決済

1回答

8166閲覧

Rで複数のデータをforループを用いて1つのデータフレームにする。

I_KAMAKURA

総合スコア11

R

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

0グッド

0クリップ

投稿2018/10/11 07:47

前提・実現したいこと

Rで複数のデータ(列数、列名ともに共通)のものを1つのデータフレームにしたい。

このデータはあるモデルを作成していてこれは繰り返し条件分岐による多数作成し、逐次的に結合していき最終的に1つのデータフレームにしたい。今回はこのデータができたとしてこれを逐次的に1つのデータフレームにする部分の実装を検討しています。

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

1: In `[<-.factor`(`*tmp*`, ri, value = "2") : 不正な因子水準です。NA が発生しました ↑同じのが16個 > df X.1. X.2. X.3. X.1539242227.69899. 1 1 2 3 1539242227.69899 2 <NA> <NA> <NA> <NA> 3 <NA> <NA> <NA> <NA> 4 <NA> <NA> <NA> <NA> 5 <NA> <NA> <NA> <NA>

該当のソースコード

R

1df <- data.frame(matrix(rep(NA, 4), nrow=1))[numeric(0), ] 2colnames(df) <- c("column1", "column2", "column3", "time") 3 4for (i in 1:5){ 5 data <- c(1*i, 2*i,3*i, as.character(Sys.time()+rnorm(1, mean = 10, sd = 4))) 6 #cat(data,"\n") 7 df <- rbind(df, data) 8} 9df

試したこと

https://takeshou.hatenadiary.jp/entry/20080110/1199933519
より
data <- sapply(data,as.character)
を追加しましたが同じエラー。
ちなみにforを用いない場合はできるようです。(しかし列ラベルの名前が変わります。ここは最悪構わないのですが原因が明確であればご教示いただけると助かります。)

またこのエラーに限定せず、別に良いやり方があればご教示ください。
よろしくお願いします。

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

RStudio
Version 1.1.383 – © 2009-2017 RStudio, Inc.

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

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

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

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

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

guest

回答1

0

ベストアンサー

直接的なエラー(厳密にはwarning)の原因はデータフレームを生成する際に文字列がfactorになってしまっていることにあります。Rの「余計なお世話」仕様の一つでハマりやすいポイントです。

R

1for (i in 1:5){ 2 data <- c(1*i, 2*i, 3*i, as.character(Sys.time()+rnorm(1, mean = 10, sd = 4))) 3 if(i==1){ 4 df <- data.frame(matrix(data, nrow=1), stringsAsFactors = F) 5# df <- data.frame(matrix(data, nrow=1)) ←これではダメ 6 }else{ 7 df <- rbind(df, data) 8 } 9} 10 11colnames(df) <- c("column1", "column2", "column3", "time") 12

投稿2018/10/11 08:21

KojiDoi

総合スコア13669

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

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

I_KAMAKURA

2018/10/11 08:26

ありがとうございます!Rのfactorについてちょっとよくわかってなかったので腰すえて勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問