1

ある列に姓があり、別の列に家族の各人の名または氏名(最初のスペースが最後)のゲストリストがあります。他の列に名だけを付けたいのですが。

gsub(guest.w$Last.Name,"",guest.w$Party.Name.s.)

行が1つしかない場合は完全に機能しますが、データフレームの各行に対してどのように実行しますか。forループを作成する必要がありますか?pmax()がmax()に関連する方法と同様に、並行してそれを行う方法はありますか?

私の問題は、JD Longが以前に尋ねた質問と似ていますが、その質問は私のものと比べると簡単なものでした。

スミス; ジョー・スミス、ケビン・スミス、ジェーン・スミス・
アルター; ロバート・アルター、メアリー・アルター、ロナルド・アルター

になる

スミス; ジョー、ケビン、ジェーン
アルター; ロバート、メアリー、ロナルド

4

3 に答える 3

1

hadleys adply の使用:

library(plyr)
df <- data.frame(rbind(c('Smith', 'Joe Smith, Kevin Smith, Jane Smith'), c('Alter', 'Robert Alter, Mary Alter, Ronald Alter')))
names(df) <- c("last", "name")
adply(df,1,transform, name=gsub(last, '', name))

おそらく、新しいベクターのスペースをクリーンアップする必要があります。

于 2010-01-16T22:39:51.227 に答える
0

apply()関数を機能させるには、おそらく式を「ラップ」する必要があります。

  • data.frameで作業している場合は、apply()を使用する必要があります(sapply()ではありません)。
  • 適用する関数を作成する必要があります(return句を使用)
  • 関数入力としてdata.frame行を操作するのは少し注意が必要です。これらはベクトルに変換され、一部のプロパティが失われるため($記号を使用して名前付きフィールドを呼び出すことはできません)、最初にリストに変換することをお勧めします。

最終結果は次のようになります。

df <- rbind(c('Smith', 'Joe Smith, Kevin Smith, Jane Smith'), c('Alter', 'Robert Alter, Mary Alter, Ronald Alter'))
colnames(df) = c('Last.Name', 'Party.Name.s.')
apply(df,1,function(y) {y = as.list(y);return(gsub(y$Last.Name, "", y$Party.Name.s.))}) 
于 2010-01-21T09:49:42.663 に答える
-2

データフレームで機能するかどうかはわかりませんが、適用関数の1つを試すことができます。

`y1 <- sapply(dataframe, gsub(guest.w$Last.Name,"",guest.w$Party.Name.s.))`
于 2010-01-16T21:50:21.450 に答える