簡體   English   中英

向量加法和向量索引

[英]Vector addition with vector indexing

這很可能在其他地方有一個答案,但是我在表達問題的措詞以找到我需要的東西時遇到了麻煩。

我有兩個數據框A和B,A的行比B多。我想根據A的一列從B查找一個值,並將其添加到A的另一列。

A$ColumnToAdd + B[ColumnToMatch == A$ColumnToMatch,]$ColumnToAdd

但是我得到了很多NA:

Warning in `==.default`: longer object length is not a multiple of shorter object length

我可以使用凌亂的for循環來做到這一點,但我正在尋找更快,更優雅的產品。

謝謝

如果我正確理解了您的問題,那么您正在尋找合並聯接 ,如注釋中所建議。

這是一個簡單的示例,說明兩者都應使用您所描述的虛擬數據。

library(tidyverse)

# Some dummy data
ColumnToAdd <- c(1,1,1,1,1,1,1,1)
ColumnToMatch  <- c('a','b','b','b','c','a','c','d')
A <- data.frame(ColumnToAdd, ColumnToMatch)
ColumnToAdd <- c(1,2,3,4)
ColumnToMatch <- c('a','b','c','d')
B <- data.frame(ColumnToAdd, ColumnToMatch)

# Example using merge
A %>% 
  merge(B, by = c("ColumnToMatch")) %>%  
  mutate(sum = ColumnToAdd.x + ColumnToAdd.y)                    

# Example using join
A %>% 
  inner_join(B, by = c("ColumnToMatch")) %>% 
  mutate(sum = ColumnToAdd.x + ColumnToAdd.y)    

dplyr版本優於合並的優點是

  • 行按現有順序保留
  • 快多了
  • 告訴您要合並的鍵(如果不提供)
  • 也可以使用數據庫表。

暫無
暫無

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

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