2017-08-23 47 views
-1
df1 <- data.frame(first_pair1_1=c(1,2,3,1,2,3,4),second_pair1_1=c(1,3,3,1,4,3,4),third_pair1_1=c(1,3,3,1,4,3,4),first_pair1_2=c(7,4,3,1,4,3,4),second_pair1_2=c(7,4,3,1,4,3,4),third_pair1_2=c(1,3,3,1,4,3,4),first_pair2_1=c(1,2,3,1,2,3,4),second_pair2_1=c(1,3,3,1,4,3,4),third_pair2_1=c(1,3,3,1,4,3,4),first_pair2_2=c(7,4,3,1,4,3,4),second_pair2_2=c(7,4,3,1,4,3,4),third_pair2_2=c(1,3,3,1,4,3,4)) 

我有數據幀以上,我嘗試做如下計算:獲得類似對之和乘以結果以獲得相同的數據幀中的新列

(first_pair1_1 * second_pair1_1 * third_pair1_1) + 
(first_pair1_2 * second_pair1_2 * third_pair1_2) + 
(first_pair2_1 * second_pair2_1 * third_pair2_1) + 
(first_pair2_2 * second_pair2_2 * third_pair2_2) 

我想造成同一個數據框中的新列。可以有更多的對,但模式會相同。

回答

2

這是一個基於R的想法。我們遍歷1_1,1_2,...的唯一後綴,並將包含每個後綴(即1_1 * 1_1 * 1_1等)的所有列相乘。然後,我們使用rowSums添加它們,即

ind <- unique(sub('.*pair', '', names(df1))) 
rowSums(sapply(ind, function(i) Reduce(`*`, df1[grepl(i, names(df1))]))) 
#[1] 100 132 108 4 192 108 256 
1
Reduce("+", lapply(split.default(df1, sub(pattern = "^[^_]*_", "", names(df1))), 
        function(a) Reduce("*", a))) 
#[1] 100 132 108 4 192 108 256