首页 > 解决方案 > 计算行中多个值的总和

问题描述

嗨,我有如下 ai/p 数据框

df = data.frame('value' = c("(1_00),(0_04),(1_08),(0_12),(1_14)","(1_15),(0_22),(1_29)",
                            "(0_30),(1_38),(0_40),(1_44)","(0_45),(1_57),(0_59)",
                            "(0_15),(1_21),(0_26),(0_29)"),stringsAsFactors = F)

从上面的数据框中,我无法找出来自“sample_calc”列的“output”列“sample_calc”的计算如下

for row:1-  i.e `(1_00),(0_04),(1_08),(0_12),(1_14)` calculated as second set  
 of character in second block after "_" (04) minus second set (00) in the first 
 block multply by first set in   first block  (i.e: (4-0)*1 )    
                  similarly from 3rd block to 2nd block .finally we need need to   add all blocks.`(4-0)*1 + (8-4)*0 +(12-8)*1 + (14-12)*0`

o/p df1

df1 = data.frame('value' = c("(1_00),(0_04),(1_08),(0_12),(1_14)",
                             "(1_15),(0_22),(1_29)",
                             "(0_30),(1_38),(0_40),(1_44)",
                             "(0_45),(1_57),(0_59)","(1_00),(0_07),(1_14)",
                             "(0_15),(1_21),(0_26),(0_29)"),
                              "sample_calc"=c("(4-0)*1 + (8-4)*0 +(12-8)*1 + (14-12)*0",
                                              "(22-15)*1 + (29-22)*0",
                                              "(38-30)*0 + (40-38)*1 + (44-40)*0",
                                              "(57-45)*0 + (59-57)*1",
                                              "(7-0)*1 + (14-7)*0",
                                              "(21-15)*0  + (26-21)*1 + (29-26)*0"),
                            "output"=c(8,7,2,2,7,5),stringsAsFactors = F)

标签: r

解决方案


首先,我将使用以下代码将字符串转换为数字字符串:

foo <- lapply(strsplit(gsub("\\(|\\)", "", df$value), ","),
              function(x) as.numeric(unlist(strsplit(x, "_"))))

foo包含相同的信息,但数量:

foo[1:2]    

[[1]]
 [1]  1  0  0  4  1  8  0 12  1 14

[[2]]
[1]  1 15  0 22  1 29

接下来,我们只需将您的计算应用于(我们得到“第二组”中元素的foo“ID”( )并应用所需的逻辑:)ysum((x[y] - x[y - 2]) * x[y - 3])

sapply(foo, function(x) {y <- seq(4, length(x), 2); 
                         sum((x[y] - x[y - 2]) * x[y - 3])})

[1] 8 7 2 2 7 5

推荐阅读