2

次のベクトル res およびマトリックス チームを検討しています。ベクトル res はインデックスを表し、インデックス番号がベクトル res で、gender="F" である名前のみを抽出する必要があります。

私はRでこれを行う必要があり、私はRの初心者であるため、これを解決できませんでした.

res
[1]  2 12 16  5  6 19 17 14  9  4
team
names       genders
[1,] "aa"           "M"       
[2,] "ab"            "M"       
[3,] "al"            "M"       
[4,] "alp"           "M"       
[5,] "amr"           "F"       
[6,] "and"           "M"       
[7,] "an"            "M"       
[8,] "anv"           "F"       
[9,] "as"            "M"       
[10,] "ed"            "M"       
[11,] "neh"           "F"       
[12,] "pan"           "M"       
[13,] "poo"           "F"       
[14,] "ra"            "M"       
[15,] "roh"           "M"       
[16,] "shr"           "F"       
[17,] "sub"           "M"       
[18,] "val"           "M"       
[19,] "xi"            "M"    
4

3 に答える 3

7

これを行うには多くの方法があります。

最初に、どの行が にあるかを選択できますres:

team$names[res]

gender次に、次のものを選択できます"F"

team$names[res][  team$genders[res]=="F"   ]

team$genders[res]の行に対応する性別が選択され、res女性のみを受け入れるようにフィルタリングすることに注意してください。


必要に応じて、逆にすることもできます。

team$names[  team$genders=="F" & (1:nrow(team) %in% res) ] 

これはlengthteam$genders=="F"の論理ベクトルで、性別が「F」である場合とnrow(team)そうでない場合です。TRUEFALSE

1:nrow(team)は行番号を生成し、行番号が に1:nrow(team) %in% resあるTRUE場合は ですres

&性別が「F」で、行番号が「」であることを確認してresください。


which(team$genders=="F")女性の行番号のベクトルを返す which を実行してから、次のようにすることもできます。

team$names[ intersect(  which(team$genders=="F") , res ) ]

ここで、両方と女性intersectに存在する行番号を選択します。 res


そして、私は、より多くの方法を考えていると確信しています。

于 2012-04-13T00:04:55.860 に答える
7

あなたteamが amatrixまたは aの場合、これは機能するはずですdata.frame

# emulate your data
team <- data.frame(names=LETTERS, genders=rep(c("M","F"), 13))
res <- 10:26

team[intersect(res, which(team[,"genders"]=="F")), "names"]
#[1] J L N P R T V X Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

# Try with a matrix instead of data.frame
team <- as.matrix(team)
team[intersect(res, which(team[,"genders"]=="F")), "names"]
#[1] "J" "L" "N" "P" "R" "T" "V" "X" "Z"

基本的な考え方は、「F」の性別行のインデックスを取得し ( を使用which)、集合操作を使用してインデックスintersectと AND することです。時々役立つバリアントresunionあります。setdiff

于 2012-04-13T00:01:40.077 に答える
2
team <- structure(c("aa", "ab", "al", "alp", "amr", "and", "an", "anv", 
"as", "ed", "neh", "pan", "poo", "ra", "roh", "shr", "sub", "val", 
"xi", "M", "M", "M", "M", "F", "M", "M", "F", "M", "M", "F", 
"M", "F", "M", "M", "F", "M", "M", "M"), .Dim = c(19L, 2L), .Dimnames = list(
    NULL, c("names", "genders")))

 team[,"names"][ intersect(  which(team[,"genders"]=="F") , res ) ]
#[1] "amr" "shr"
 team[,"names"][ team[,"genders"]=="F" & 1:NROW(team) %in% res  ]
#[1] "amr" "shr"
于 2012-04-14T04:04:36.847 に答える