gpt4 book ai didi

r - 将列乘以 R 中的子字符串

转载 作者:行者123 更新时间:2023-12-02 08:06:32 24 4
gpt4 key购买 nike

假设我有一个包含多个组件的数据框,它们的属性列在多个列中,我想对这些列运行多个函数。我的方法是尝试将其基于每个列标题中的子字符串,但我一直无法弄清楚该怎么做。下面是数据框的示例。

Basket   F_Type_1   F_Qty_1   F_P_1   F_Type_2   F_Qty_2   F_P_2 
AAA Apple 10 2.5 Banana 9 2
BBB Peach 5 6 Melon 20 5

我基本上想将两个新列 cbind 到这个数据框的末尾,将 Qty 和 P 相乘,这样你就可以在末尾得到两个新列,如下所示。

F_Total_1   F_Total_2
25 18
30 100

输入是动态的,因此有时可能是某些篮子中的 2 个水果或 10 个水果。但我可以弄清楚那部分,它还试图弄清楚如何根据子字符串“1”或“2”来乘以列。

非常感谢您的所有帮助以及您可能拥有的任何其他方法!

最佳答案

我们创建了一个函数来查找特定名称,然后计算行乘积。此功能的重任是 mapply功能。我们添加最后一步来重命名生成的 data.frame

fun1 <- function(data){
qty_names <- names(data)[grepl(pattern = "Qty", x = names(data))]

p_names <- names(data)[grepl(pattern = "P", x = names(data))]

setNames(
data.frame(
mapply(qty_names, p_names,
FUN = function(n1, n2) apply(data[c(n1,n2)], 1, prod))),
paste0('F_Total_', 1:length(p_names)))


}

cbind(dat, fun1(dat))

Basket F_Type_1 F_Qty_1 F_P_1 F_Type_2 F_Qty_2 F_P_2 F_Total_1 F_Total_2
1 AAA Apple 10 2.5 Banana 9 2 25 18
2 BBB Peach 5 6.0 Melon 20 5 30 100

关于r - 将列乘以 R 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50915853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com