2

フィールド全体ではなく、フィールドにあるものの一部だけでグループ化できるRのコマンドを探していました。私はうまくいく回避策を思いつきましたが、それは少し面倒で不器用です。ここにテストデータフレームがあります

name.list = data.frame(Name=c("jeff banks", "phil lender", "jeff brooks",
"barbara holcomb", "danny jefferson"),Age=c(27,34,25,45,32))
name.list

これが出力です

             Name Age
1      jeff banks  27
2     phil lender  34
3     jeff brooks  25
4 barbara holcomb  45
5 danny jefferson  32

グループとして使用したり、ダミー変数を割り当てたりできるように、「jeff」を含むすべての名前全体を特定したいと考えています。つまり、次のようにデータ フレームに追加します。

             Name Age   Jeff.field
1      jeff banks  27       1
2     phil lender  34       0
3     jeff brooks  25       1
4 barbara holcomb  45       0
5 danny jefferson  32       1

私はこの解決策を思いつきましたが、あまりエレガントではありません

name.list2=name.list[grep("jeff",name.list$Name),]
name.list2$jeff.field=rep(1,dim(name.list2)[1])

name.list3=name.list[-grep("jeff",name.list$Name),]
name.list3$jeff.field=rep(0,dim(name.list3)[1])

name.list4=rbind(name.list2,name.list3)
name.list4

これにより、このデータフレームが取得されます

             Name Age jeff.field
1      jeff banks  27          1
3     jeff brooks  25          1
5 danny jefferson  32          1
2     phil lender  34          0
4 barbara holcomb  45          0

より基本的なアプローチを知っている人はいますか?

4

1 に答える 1

2

どうぞ:

name.list$jeff.field <- grepl("jeff", name.list$Name)
name.list[order(name.list$jeff.field), ]

             Name Age jeff.field
2     phil lender  34      FALSE
4 barbara holcomb  45      FALSE
1      jeff banks  27       TRUE
3     jeff brooks  25       TRUE
5 danny jefferson  32       TRUE
于 2012-06-08T20:05:11.760 に答える