![](/img/trans.png)
[英]R - How to make a subset of columns based on values in a row in a data frame
[英]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.