2017-02-21 8 views
4

私は2つの列ownerとuser、両方の文字列、両方の名前を持つデータフレームを持っています。各行は関係を表します。オーナーがフォーラムに質問を投稿し、ユーザーが再生しました。特定のユーザーが所有者になると、すべてのユーザーの一覧が必要です。重複はOKですが、変数variableが存在するのでリストは同じでなければなりません。Rの一致と返却リストR

出力は、新しい出力列となります。出力は各行ごとに分類された後に出力されます。私は自分で分類することができます。

| Owner | User | Output | Cat_output | 
|-------|------|--------|------------| 
| A  | B | V,D | indirect | 
| A  | C | A  | direct  | 
| B  | V |  | empty  | 
| B  | D |  | empty  | 
| C  | A | B,C | direct  | 

Return MULTIPLE corresponding values for ONE Lookup Value, Horizontally, in one RowでExcelに返します。

これをRで再現する必要があり、それを把握することはできません。

おかげプリモジュ

答えて

0

splitが頭に浮かんだ...

listとして "出力":

df$Output <- with(df, split(User, Owner))[df$User] 
df 
# Owner User Output 
# 1  A B V, D 
# 2  A C  A 
# 3  B V NULL 
# 4  B D NULL 
# 5  C A B, C 

単一の文字列」

として "出力"
df$Output <- sapply(with(df, split(User, Owner)), toString)[df$User] 
df 
# Owner User Output 
# 1  A B V, D 
# 2  A C  A 
# 3  B V <NA> 
# 4  B D <NA> 
# 5  C A B, C 
+0

最後に私はこの歌を使用しました文字列解。 –

2

我々はsapplyを使用しUserOwnerがカラム中に存在する行であるかをチェックし、対応する値を選択することができます。

df$Output <- sapply(df$User, function(x) df$User[df$Owner %in% x]) 

df 
# Owner User Output 
#1  A B V, D 
#2  A C  A 
#3  B V  
#4  B D  
#5  C A B, C 
+0

ありがとう、この1つはうまくいきました。 –

0

あなたはdplyrgroup_by()summarize()機能を使用することができます。他の人と同様の線に沿って

library(dplyr) 

df <- data.frame(owner = c("A", "A", "B", "B", "C"), 
      user = c("B", "C", "V", "D", "A"), 
      stringsAsFactors = FALSE 
      ) 
out <- group_by(df, owner) %>% summarize(output = list(user)) 
left_join(df, out, by = c("user" = "owner")) 

# owner user output 
# 1  A B V, D 
# 2  A C  A 
# 3  B V NULL 
# 4  B D NULL 
# 5  C A B, C#