簡體   English   中英

使用 R 中的匹配將列子集乘以第二個數據框中的值

[英]Multiply subset of columns by values in second data frame using match in R

我有一個看起來像這樣的數據框

data <- read.table(text="
  Country A B
1 FRA     1 2
2 GER     2 1
", header=TRUE)

我有一個看起來像這樣的參考數據框

ref <- read.table(text="
  Names Values
1     A      5
2     B     10
", header=TRUE)

我想將每一列乘以具有相同名稱的 Ref 中的相應行(同時保留沒有匹配的非數字行)

結果應該是這樣

> result
  Country  A  B
1 FRA      5 20
2 GER     10 10

我們可以對感興趣的列 ('nm1') 進行子集化,在將列名與 'Names' 列match后,乘以復制的 'ref' 對應的 'Values',並更新這些列

nm1 <- c("A", "B")
result <- data
result[nm1] <-data[nm1] * ref$Values[match(nm1, ref$Names)][col(data[nm1])]
result
#  Country  A  B
#1     FRA  5 20
#2     GER 10 10

這也是一種選擇。 不過有點長,上面建議的答案可能會更好。

library(tidyverse)
data <- data.frame(
  Country = c("FRA", "GER"),
  A = c(1,2),
  B = c(2,1)
)

ref <- data.frame(
  Names = c("A", "B"),
  Values = c(5, 15)
)

data %>% pivot_longer(cols = c(A,B), values_to = c("Value"), names_to = "Names") %>% 
left_join(ref, by = "Names") %>% 
mutate(New_Value = Value * Values) %>% 
select(-Value, -Values) %>% 
pivot_wider(names_from = Names, values_from = New_Value) 

暫無
暫無

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

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