簡體   English   中英

R中的匹配和返回列表

[英]Match and return list in R

我有兩個列所有者和用戶的數據框,兩個字符串,兩個名稱。 每行代表一種關系。 所有者已在論壇上發布了一個問題,用戶已重播。 當特定用戶成為所有者時,我需要所有用戶的列表。 重復是可以的,因為時間變量存在,列表必須與它相同。

| Owner | User |   
|-------|------|  
| A     | B    |  
| A     | C    |  
| B     | V    | 
| B     | D    | 
| C     | A    |

輸出將是每個行的新字符串列輸出,並在該輸出的分類之后。 我自己可以做分類。

| 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     | 

我會在Excel中返回這個, 返回MULTIPLE對應的值為ONE Lookup Value,水平,在一行中

我必須在R中重現這個並且無法弄明白。

謝謝Primoz

我們可以使用sapply並檢查“ Owner列中User所在的行,並選擇相應的值。

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

您可以在dplyr使用group_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# 

與其他人類似,我想到了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM