簡體   English   中英

將 data.frame 中的值添加到另一個 data.frame 中匹配兩個條件的新列

[英]add values from data.frame to a new column in another data.frame that matches two criteria

我有兩個 data.frames 看起來像(不是全長):

第一個 - AnalysisData

 Stock Symbol.SEK    TPDate      TP   PTP
   <chr> <chr>        <chr>     <dbl> <dbl>
 1 AAK   AAK.ST     2018-08-23   197    62
 2 ABB … ABB.ST     2016-09-30    11   188
 3 Addt… ADDT-B.ST  2017-11-06   237   233
 4 Ahls… AM1S.ST    2015-10-14   148   226  
 5 Alfa… ALFA.ST    2018-04-23   272   188 

第二個 - master_df_tq (編輯名稱)

  symbol[,1] date        open  high   low close volume adjusted Delt.1.arithmetic
   <chr>      <chr>      <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl>             <dbl>
 1 AAK.ST     2015-01-02  69.7  69.9  69.0  69.2 133860     49.8         NA       
 2 AAK.ST     2015-01-05  69.2  69.9  68.8  69.2  93168     49.7         -0.00670 
 3 AAK.ST     2015-01-07  68.3  69.1  67.7  68.4 308952     49.2         -0.0128  
 4 AAK.ST     2015-01-08  69.5  69.9  68.4  69.7 405258     50.1          0.0168  
 5 AAK.ST     2015-01-09  69.5  70.5  69.2  70   214548     50.3         -0.000239
 6 AAK.ST     2015-01-12  70.4  70.8  69.4  70.0 300024     50.3          0.0142  
 7 AAK.ST     2015-01-13  70.1  70.5  69.5  70.0 770190     50.3         -0.00450 

我的目標是將Delt.1.arithmetic中的值添加到AnalysisData中與相同日期和符號的標准匹配的新列中,即date = TPDatesymbol = Symbol.SEK

我嘗試使用來自dplyrjoin function 但我無法解決。 我已經嘗試過以下兩種方法:

left_join(master_df_tq, AnalysisData, by = c("date" = "TPDate" , "Symbol.SEK" = "Symbol.SEK"))

master_df_tq %>% left_join(AnalysisData, by = c("date" = "TPDate" , "Symbol.SEK" = "Symbol.SEK"))

但它們不起作用,我收到以下消息:

Warning message:
Column `symbol`/`Symbol.SEK` has different attributes on LHS and RHS of join 

有人有想法嗎? 我應該使用merge還是我缺少的數據格式?

編輯:我已將symbol更改為Symbol.SEK並將其設為字符,現在錯誤消息不會彈出,但我的數據AnalysisData沒有發生任何事情。 控制台中顯示的只是以下內容

> master_df_tq %>% left_join(AnalysisData, by = c("date" = "TPDate" , "Symbol.SEK" = "Symbol.SEK"))
# A tibble: 146,685 x 26
# Groups:   Symbol.SEK [131]
   Symbol.SEK date   open  high   low close volume adjusted Delt.1.arithmet… Stock    TP   PTP TP_Diff
   <chr>      <chr> <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl>            <dbl> <chr> <dbl> <dbl>   <dbl>
 1 AAK.ST     2015…  69.7  69.9  69.0  69.2 133860     49.8        NA        NA       NA    NA      NA
 2 AAK.ST     2015…  69.2  69.9  68.8  69.2  93168     49.7        -0.00670  NA       NA    NA      NA
 3 AAK.ST     2015…  68.3  69.1  67.7  68.4 308952     49.2        -0.0128   NA       NA    NA      NA
 4 AAK.ST     2015…  69.5  69.9  68.4  69.7 405258     50.1         0.0168   NA       NA    NA      NA
 5 AAK.ST     2015…  69.5  70.5  69.2  70   214548     50.3        -0.000239 NA       NA    NA      NA

EDIT2.0:

這是 dput 的最后幾行 output(它們在 master_df_tq 中總共有 146684 行): 注意:名稱是 master_df_tq,而不是我首先寫的 master_df_sq

    139149:140404, 138775:139148, 140405:141660, 141661:142916, 
    142917:144172, 144173:145428)), row.names = c(NA, -131L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = FALSE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
> dput(head(master_df_tq))
structure(list(Symbol.SEK = c("AAK.ST", "AAK.ST", "AAK.ST", "AAK.ST", 
"AAK.ST", "AAK.ST"), date = c("2015-01-02", "2015-01-05", "2015-01-07", 
"2015-01-08", "2015-01-09", "2015-01-12"), open = c(69.683296, 
69.216698, 68.333298, 69.483299, 69.466698, 70.449997), high = c(69.866699, 
69.916702, 69.083298, 69.916702, 70.483299, 70.75), low = c(69.033302, 
68.849998, 67.716698, 68.433296, 69.150002, 69.433296), close = c(69.233299, 
69.199997, 68.400002, 69.650002, 70, 70.033302), volume = c(133860, 
93168, 308952, 405258, 214548, 300024), adjusted = c(49.755833, 
49.731899, 49.156975, 50.055305, 50.306839, 50.330769), Delt.1.arithmetic = c(NA, 
-0.00669598062640442, -0.0127628162788117, 0.0168292916288044, 
-0.000238920722517966, 0.0141549696229983)), row.names = c(NA, 
-6L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
    Symbol.SEK = "AAK.ST", .rows = list(1:6)), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"), .drop = FALSE))

編輯 3.0:

structure(list(Stock = c("AAK", "ABB Ltd", "Addtech B", "Ahlstrom-Munksjö Oyj", 
"Alfa Laval", "Arion Banki SDB"), Symbol.SEK = c("AAK.ST", "ABB.ST", 
"ADDT-B.ST", "AM1S.ST", "ALFA.ST", "ARION-SDB.ST"), TPDate = c("2019-10-10", 
"2019-10-10", "2019-10-10", "2019-10-10", "2019-10-10", "2019-10-10"
), TP = c(197, 11, 237, 148, 272, 291), PTP = c(62, 188, 233, 
226, 188, 201), TP_Diff = c(135, -177, 4, -78, 84, 90), AREC = c("Buy", 
"Hold", "Hold", "Buy", "Buy", "Buy"), APREC = c("Sell", "Sell", 
"Buy", "Sell", "Buy", "Buy"), RTP = c(2.17741935483871, -0.941489361702128, 
0.0171673819742489, -0.345132743362832, 0.446808510638298, 0.447761194029851
), Analyst = c("SEB", "Nordea", "DBN", "Swedbank", "Avanza", 
"SEB"), Bransch = c("Konsument", "Industri", "Industri", "Råvaror", 
"Industri", "Finans"), return = c(0.00825375780488757, 0.00224086274509805, 
-0.0242914979757085, 0, 0.0171685153116452, 0.00486223662884933
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

我解決了這個問題,因為總會有一個匹配,但是如果這些值不匹配任何東西,整數(0)就會有問題

for (i in 1:nrow(AnalysisData)) {
  index <- which(AnalysisData$Symbol.SEK[i]==master_df_tq$Symbol.SEK & AnalysisData$TPDate[i]==master_df_tq$date)
  AnalysisData$return[i] <- master_df_tq$Delt.1.arithmetic[index]
}

這會給你想要的 output 嗎?

result <- merge(AnalysisData, master_df_tq, by.x=c('TPDate', 'Symbol.SEK'), by.y=c('date', 'Symbol.SEK'), , all.x=TRUE)
result

另外,我不確定為什么這不是您正在尋找的 output - 從您的帖子中復制粘貼

> master_df_tq %>% left_join(AnalysisData, by = c("date" = "TPDate" , "Symbol.SEK" = "Symbol.SEK"))
# A tibble: 146,685 x 26
# Groups:   Symbol.SEK [131]
   Symbol.SEK date   open  high   low close volume adjusted Delt.1.arithmet… Stock    TP   PTP TP_Diff
   <chr>      <chr> <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl>            <dbl> <chr> <dbl> <dbl>   <dbl>
 1 AAK.ST     2015…  69.7  69.9  69.0  69.2 133860     49.8        NA        NA       NA    NA      NA
 2 AAK.ST     2015…  69.2  69.9  68.8  69.2  93168     49.7        -0.00670  NA       NA    NA      NA
 3 AAK.ST     2015…  68.3  69.1  67.7  68.4 308952     49.2        -0.0128   NA       NA    NA      NA
 4 AAK.ST     2015…  69.5  69.9  68.4  69.7 405258     50.1         0.0168   NA       NA    NA      NA
 5 AAK.ST     2015…  69.5  70.5  69.2  70   214548     50.3        -0.000239 NA       NA    NA      NA

暫無
暫無

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

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