[解決済み] data.frame 内の値の条件付き置換
2023-07-30 21:52:37
質問
ループを使用せずにデータフレーム内の値を条件付きで置換する方法を理解しようとしています。私のデータフレームは次のように構成されています。
> df
a b est
1 11.77000 2 0
2 10.90000 3 0
3 10.32000 2 0
4 10.96000 0 0
5 9.90600 0 0
6 10.70000 0 0
7 11.43000 1 0
8 11.41000 2 0
9 10.48512 4 0
10 11.19000 0 0
で、その
dput
の出力はこうなります。
structure(list(a = c(11.77, 10.9, 10.32, 10.96, 9.906, 10.7,
11.43, 11.41, 10.48512, 11.19), b = c(2, 3, 2, 0, 0, 0, 1, 2,
4, 0), est = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("a",
"b", "est"), row.names = c(NA, -10L), class = "data.frame")
やりたいことは
b
. もし
b
が 0 ならば
est
を
a
. 私は、以下のことを理解しています。
df$est[df$b == 0] <- 23
のすべての値を設定します。
est
の値を 23 に設定します。
b==0
. 私が理解していないのは、どのようにして
est
の値に
a
の値に変換する。例えば
df$est[df$b == 0] <- (df$a - 5)/2.533
は以下のような警告を出します。
Warning message:
In df$est[df$b == 0] <- (df$a - 5)/2.533 :
number of items to replace is not a multiple of replacement length
vectorではなく、該当するセルを渡す方法はありますか?
どのように解決するのですか?
条件付きインデックスを作成しているため
df$est
を条件付きでインデックス付けしているので、置換ベクトル
df$a
:
index <- df$b == 0
df$est[index] <- (df$a[index] - 5)/2.533
もちろん、変数
index
は一時的なもので、コードをもう少し読みやすくするために使っています。 1ステップで書けます。
df$est[df$b == 0] <- (df$a[df$b == 0] - 5)/2.533
さらに読みやすくするために
within
:
df <- within(df, est[b==0] <- (a[b==0]-5)/2.533)
どの方法を選んでも、結果は
df
a b est
1 11.77000 2 0.000000
2 10.90000 3 0.000000
3 10.32000 2 0.000000
4 10.96000 0 2.352941
5 9.90600 0 1.936834
6 10.70000 0 2.250296
7 11.43000 1 0.000000
8 11.41000 2 0.000000
9 10.48512 4 0.000000
10 11.19000 0 2.443743
他の方が指摘されているように、あなたの例では別の解決方法として
ifelse
.
関連
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
ggplot2 からグリッドと背景色を削除する。
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み] R dataframeでNAの値をゼロに置き換えるには?
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] 空のdata.frameを作成する
-
[解決済み] [Solved] data.frameで全てまたは一部のNA(欠損値)を含む行を削除する。
-
[解決済み】data.frameのカラムを因子から文字に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R LanguageError in hist.default() : 'x' は数値でなければなりません.
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] Rの%*%の意味 [重複]について
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] data.frameの1つの列の名前を変更する方法は?
-
[解決済み】Rスクリプトで警告をグローバルに抑制する方法