簡體   English   中英

從2個不同的數據框中划分2列

[英]Divide 2 columns from 2 different dataframes

當有多個列作為ID來源時,有人知道如何從兩個不同的數據幀中划分兩列嗎?

例:

library(dplyr)
  name <- c('A','A', 
            'B','B')
  month = c("oct 2018", "nov 2018", 
            "oct 2018",  "nov 2018")
  var1 = c("99", "99", 
            "99",  "99")
  value <- seq(1:length(month))
  df1 = data.frame(name, month, var1, value)

  df2 = df1
  df2["var1"] = c("992", "992", "992", "992")
  df2["value"] = c(2, 4, 6, 8)

  df1

  df2

輸出量

> df1
  name    month var1 value
1    A oct 2018   99     1
2    A nov 2018   99     2
3    B oct 2018   99     3
4    B nov 2018   99     4

> df2
  name    month var1 value
1    A oct 2018  992     2
2    A nov 2018  992     4
3    B oct 2018  992     6
4    B nov 2018  992     8

有誰知道如何創建一個新的數據框,該數據框將df2中的“值”列除以df1的值列? 當列數比當前示例多時,也應該可以使用該方法。

將兩個數據框連接在一起,然后執行除法並刪除由連接生成的不需要的列(假設您希望計算value列替換原始數據幀中的value列)。 根據您的需要,您可能需要一個不同的*_join

library(dplyr)
df1 %>% 
  inner_join(df2, by = c("name", "month")) %>% 
  mutate(value = value.x / value.y) %>%
  select(-value.x, -value.y)

給予:

  name    month var1.x var1.y value
1    A oct 2018     99    992   0.5
2    A nov 2018     99    992   0.5
3    B oct 2018     99    992   0.5
4    B nov 2018     99    992   0.5

在基礎R中,我們可以merge

df3 <- merge(df1, df2, by = c("name", "month")) 
df3$value <- df3$value.x/df3$value.y
df3
#  name    month var1.x value.x var1.y value.y value
#1    A nov 2018     99       2    992       4   0.5
#2    A oct 2018     99       1    992       2   0.5
#3    B nov 2018     99       4    992       8   0.5
#4    B oct 2018     99       3    992       6   0.5

如果value.x ,可以刪除value.xvalue.y列。

我們可以用data.table以及做一個連接,並通過在其他數據集由相應列除以“價值”列創建列“價值”,同時加入on “名”和“月”

library(data.table)
df3 <- copy(df1)
setDT(df3)[df2, value := value/i.value, on = .(name, month)]
df3
#   name    month var1 value
#1:    A oct 2018   99   0.5
#2:    A nov 2018   99   0.5
#3:    B oct 2018   99   0.5
#4:    B nov 2018   99   0.5

暫無
暫無

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

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