1

私はRとプログラミング全般に非常に慣れていません。forループの使用方法を学び始めたばかりですが、データフレームの一部として出力する変数を取得する方法がわかりません。

私は次のようなデータを持っています:

Place  Sex  Length
A      M    32
A      M    33
A      F    35
A      F    35
A      F    35
A      F    39
B      M    30
B      F    25
B      F    28
B      F    28

データフレームに4番目の変数を作成して、データの各行にその組み合わせに固有の一意の識別子を与えPlace/Sex/Length、データがこのようになり、各個人がPlace/Sex/Length/IDそのデータの行にのみ固有の一意の組み合わせを持つようにします。 :

Place  Sex  Length Ind
A      M    32     1
A      M    33     1
A      F    35     1
A      F    35     2
A      F    35     3
A      F    39     1
B      M    30     1
B      F    25     1
B      F    28     1
B      F    28     2

よろしくお願いします。私は運がないのにこれを行う方法についての助けをしばらく探していました。

4

3 に答える 3

4

(多くの) 方法の 1 つはave、次のようにベース R で使用することです (data.frame名前付きの「temp」を想定)

within(temp, {
  ID <- ave(as.character(interaction(temp)), 
            interaction(temp), FUN = seq_along)
})
#    Place Sex Length ID
# 1      A   M     32  1
# 2      A   M     33  1
# 3      A   F     35  1
# 4      A   F     35  2
# 5      A   F     35  3
# 6      A   F     39  1
# 7      B   M     30  1
# 8      B   F     25  1
# 9      B   F     28  1
# 10     B   F     28  2

実行interaction(temp)してみて、何をしているのかを把握してください。

于 2013-03-07T19:57:22.797 に答える
3

避けられないplyr解決策。

データを取得:

temp <- read.table(text="
Place  Sex  Length
A      M    32
A      M    33
A      F    35
A      F    35
A      F    35
A      F    39
B      M    30
B      F    25
B      F    28
B      F    28",
header=TRUE)

パッケージをロードして実行:

library("plyr")
ddply(temp,c("Place","Sex","Length"),transform,ID=seq_along(Length))

順序は変更されています (必要arrange()に応じて並べ替えることができます) が、変数は正しいはずです。

##        Place Sex Length ID
## 1      A   F     35  1
## 2      A   F     35  2
## 3      A   F     35  3
## 4      A   F     39  1
## 5      A   M     32  1
## 6      A   M     33  1
## 7      B   F     25  1
## 8      B   F     28  1
## 9      B   F     28  2
## 10     B   M     30  1
于 2013-03-07T21:00:05.503 に答える