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

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

詳細はこちら
R

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

3787閲覧

【R】 データフレームに列を追加する方法ーtransform関数とpaste関数の併用

toufya

総合スコア15

R

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/12/10 08:03

前提・実現したいこと

以下のようなデータフレームを想定します。

R

1> a <- rnorm(5, mean = 10, sd = 1) 2> b <- rnorm(5, mean = 10, sd = 2) 3> c <- rnorm(5, mean = 10, sd = 3) 4> data = data.frame(A=a, B=b, C=c) 5> data 6 A B C 71 11.417663 10.433327 10.734107 82 9.140156 8.982920 6.379258 93 10.820404 8.570505 10.336776 104 9.244580 11.101520 14.621967 115 11.307779 11.401912 6.052596 12

変数Aを変数Cで割った新たな変数A_divをdataに挿入します。
Bについても同様の処理を行いたいのですが、これを繰り返し処理で実行したいです。
目標は以下のようなデータフレームを取得すること。

R

1> data <- transform(data, A_div = data$A/data$C) 2> data <- transform(data, B_div = data$B/data$C) 3> data 4 A B C A_div B_div 51 11.417663 10.433327 10.734107 1.0636807 0.9719790 62 9.140156 8.982920 6.379258 1.4327930 1.4081450 73 10.820404 8.570505 10.336776 1.0467871 0.8291275 84 9.244580 11.101520 14.621967 0.6322392 0.7592358 95 11.307779 11.401912 6.052596 1.8682525 1.8838052

試したこと

新たに挿入する変数名は共通して"_div"という文字列を持っているのでpaste関数とtransform関数を組み合わせて実行しようとしましたが、以下のようなエラーを吐き出しました。
transform関数の列名指定にpaste関数の結果は適用できないそうです。
何かほかに良い方法がないか教えていただけませんでしょうか?

R

1> list <- list("A", "B") 2> for (i in list){ 3+ data <- transform(data, paste(i, "div", sep = "_") = unlist(data[i])/data$C) 4 エラー: 予想外の '=' です in: 5"for (i in list){ 6 data <- transform(data, paste(i, "div", sep = "_") =" 7> } 8 エラー: 予想外の '}' です in "}"

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

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

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

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

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

guest

回答1

0

ベストアンサー

Rで列名を文字列で指定しながら,繰り返し処理を実行する場合
文字列のvectorを要素番号で指定しながらまわす方法以外にはなさそうです.

直接の回答ではありませんが,上記の要素番号を指定する方法でよければ
以下のように実装可能です.

R

1a <- rnorm(5, mean = 10, sd = 1) 2b <- rnorm(5, mean = 10, sd = 2) 3c <- rnorm(5, mean = 10, sd = 3) 4Data = data.frame(A=a, B=b, C=c) 5 6vector = c("A", "B") 7 8for (i in 1:length(vector)){ #vectorの長さ分繰り返す 9 10 #要素数を指定し各列名を生成 11 #i=1であれば,"A_div"がtargrtに格納されます 12 target<-paste0(vector[i],"_div") 13 14 #列"target"を作成しつつ,値を計算し格納 15 Data[,target]<-Data[,vector[i]]/Data[,"C"] 16 17}

投稿2020/12/11 10:48

yyki

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問