1

私はそれを見ていないだけだと思いますが、ネット、メーリングリストのアーカイブ、または FAQ で見つけた同様のものはすべて、私の問題を実際に解明することができませんでした.

私が見つけた最も近いものはこれでした: strsplitを行ごとに適用します

2 つの文字列と 1 つの数値列を持つ df があります。次のように入力します。

df=data.frame(name1=c("A","B","C","D"),
          name2=c("B","A","D","C"),
          nums=c(1,1,4,4),
          stringsAsFactors=F)

ここで、これで一意の行を見つけたいと思いますが、2 つの名前列のみに基づいています。そして、それらの列の場合、列の順序は重要ではないためduplicated、正しく理解していれば使用できません。

そこで、2 つの名前列を行ごとに組み合わせ、行ごとに並べ替え、pasteベクトルの a を出力することを考えました (長さ = 2 のようなものと組み合わせてsapply)。

しかし、私はそれを働かせませんでした。

これまで for ループを使用してきましたが、元のデータに時間がかかります。

for(i in 1:length(df$name1)){
           mysort=sort(c(df$name1[i],df$name2[i]))
           df$combname[i]=paste(mysort[1],mysort[2])
    }

どんな提案でも大歓迎です。多分私は間違った方法で理解uniqueしているだけです。sapply

4

2 に答える 2

1

for ループのないソリューション。

df$combname <- apply(df[1:2], 1, function(x) paste(sort(x), collapse=""))
于 2013-09-28T06:04:22.180 に答える