簡體   English   中英

R:根據另一個具有重復值的 dataframe 列中的值在 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.

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