
普段はSQL serverを使用しているのですが、Rを使用する必要に迫られています。
年齢を含むデータから、階級別のダミー変数を作成したいと考えています。
元データ) ものすごく簡易化してます
age
55
66
15
変換したい形式)
a0-17 a18-64 a65-
0 1 0
0 0 1
1 0 0
こういったダミー変数に変換したいです。
SQLであれば
select *
,case when age < 18 then 1 else 0 end as 'a18'
,case when age >= 18 and age < 65 then 1 else 0 end as 'a18-64'
,case when age >= 65 and then 1 else 0 end as 'a65-'
from data1
で作成できるのですが、これをRで作成するとなると、どういったスクリプトを書けばいいのかが分かりません。
(自分なりに調べたのですが、近いものがなかなかなく、、)
ご存じの方がいらっしゃいましたら、ご教授お願いします。
No.2ベストアンサー
- 回答日時:
一例です。
入力は整数のみ、と考えています。----------------------------
# ダミーデータ生成
x <- data.frame(age = sample(c(1:99), 20, replace = TRUE))
x
# クラス分け関数
f1 <- function(x) apply(x, 2, function(x)ifelse(x %in% c( 0:17), 1, 0))
f2 <- function(x) apply(x, 2, function(x)ifelse(x %in% c(18:64), 1, 0))
f3 <- function(x) apply(x, 2, function(x)ifelse(x %in% c(65:99), 1, 0))
# ワンホットエンコーディング
result <- data.frame(x, f1(x), f2(x), f3(x))
names(result) <- c("age", "a0~17", "a18~64", "a65~")
result
----------------------------
実行結果(このサイトは勝手にスペースを消すのでガタガタですが・・・)
age a0~17 a18~64 a65~
1 92 0 0 1
2 5 1 0 0
3 85 0 0 1
4 88 0 0 1
5 28 0 1 0
6 40 0 1 0
7 28 0 1 0
8 9 1 0 0
9 38 0 1 0
10 85 0 0 1
11 29 0 1 0
12 7 1 0 0
13 69 0 0 1
14 39 0 1 0
15 66 0 0 1
16 83 0 0 1
17 32 0 1 0
18 54 0 1 0
19 91 0 0 1
20 48 0 1 0
No.3
- 回答日時:
#2です。
------------の内側を、Rコンソールにコピペすれば、お試しができます。
もし、「ageが配列の一部」のときは、最初のデータ生成部分で、xに代入して下さい。
x <- data.frame(age = dat[, 5])
これは、データdatの5列目に年齢があるときの例です。
また、「元の値が不要」の時は、ワンホットエンコーディングの箇所で、
result <- data.frame(f1(x), f2(x), f3(x))
names(result) <- c("a0~17", "a18~64", "a65~")
のように、age関連を取り除いて下さい。
最後に、「元の配列にこの結果を戻す」ときは、resultはデータフレームですので、cbind()でくっつけることが可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセル VBAについて 2 2022/05/16 16:33
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ISO8859-1でencodeされたデータ...
-
【mailto】IEではまともなのにs...
-
HTMLEncodeのこと
-
メールの件名をデコードしたい
-
TCP/IP通信の送信データについて
-
3桁コードの先頭文字を取り出す
-
VBAでShift-JISのURLエンコード
-
sort関数でひらがなとカタカナ...
-
ピクセル,dpiから容量(バイト...
-
改行文字保存時のゴミ
-
Windows 2003 サーバー のファ...
-
int型(2バイト)データの分割
-
windowsのファイルパス最大文字数
-
GETメソッドとPOSTメソ...
-
linuxサーバーにUPしたCGIにネ...
-
文字数の限界
-
phpのsetcookie()関数について...
-
Perlでのテキスト変換方法に関して
-
文字化け
-
Perlでファイル書き込みの際の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.netで、ibm漢字で書かれたテキ...
-
html→aspxへのタグ変換方法
-
TCP/IP通信の送信データについて
-
HTMLEncodeのこと
-
メールの件名をデコードしたい
-
htmlソース編集で、各タグを何...
-
メール用のソフトのソース
-
動的なURLの場合、TITLEタグ内...
-
Rでのスクリプトのご相談
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
エクセルシート名の制限を変更...
-
Excel VBA メール作成について ...
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
stable diffusionのエラー
-
ピクセル,dpiから容量(バイト...
おすすめ情報