![](/img/trans.png)
[英]R - Add a new column to a dataframe using matching values of another dataframe
[英]R: Add new column in dataframe based on values in another dataframe column with repetitive values
我的 Dataframe1 看起來像這樣,其中 Pattern 和 Name 作為我的列標題:
Pattern Name
Floral Rose
Vector Jess
Medieval Monica
Victorian Marta
Floral Jane
Vector Monica
Vector Elise
Medieval Jess
Floral Monica
然后我有 dataframe2,以 Name 和 Rank 作為標題:
Name Rank
Jess Twenty
Elise One
Jane Two
Rose Ten
Marta Three
Monica Five
我想將 Dataframe1 添加到 dataframe2,並且每個名稱一行用於 Rank 和 Pattern 是這樣的(其中有 Pattern 的額外信息,它們都合並為一行並用逗號分隔:
Name Rank Pattern
Jess Twenty Vector, Medieval
Elise One Vector
Jane Two Floral
Rose Ten Floral
Marta Three Victorian
Monica Five Medieval, Floral, Vector
我用過了:
dataframe2$Pattern <- Dataframe1$Pattern [match(dataframe2$Name, Dataframe1$Name)]
但它只捕獲一種模式。 有什么直接的方法嗎?
干杯!
數據:
df1 <- tribble(
~Pattern, ~Name,
"Floral", "Rose",
"Vector", "Jess",
"Medieval" , "Monica",
"Victorian", "Marta",
"Floral", "Jane",
"Vector", "Monica",
"Vector", "Elise",
"Medieval", "Jess",
"Floral", "Monica"
)
df2 <- tribble(
~Name, ~Rank,
"Jess", "Twenty",
"Elise", "One",
"Jane", "Two",
"Rose", "Ten",
"Marta", "Three",
"Monica", "Five"
)
在第一個 data.frame 中,您需要找到不同Name
的所有Pattern
並將它們粘貼在一起。 您可以通過使用group_by
+ summarise
+ str_c
函數來實現。 之后,您需要按Name
連接兩個表:
library(tidyverse)
df1 %>%
group_by(Name) %>%
summarise(Pattern = str_c(Pattern, collapse = ", ")) %>%
inner_join(df2, by = "Name")
# A tibble: 6 x 3
Name Pattern Rank
<chr> <chr> <chr>
1 Elise Vector One
2 Jane Floral Two
3 Jess Vector, Medieval Twenty
4 Marta Victorian Three
5 Monica Medieval, Vector, Floral Five
6 Rose Floral Ten
您還使用左連接:
left_join(dataframe2,dataframe1,by='Name') %>%
group_by(Name, Rank) %>%
summarise(Pattern = str_c(Pattern, collapse = ", "))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.