![](/img/trans.png)
[英]R - match combinations of nested list values from an index and return value
[英]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.