Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
顺序聚合模型-data.frame_R_Combinations - Fatal编程技术网

顺序聚合模型-data.frame

顺序聚合模型-data.frame,r,combinations,R,Combinations,我正在尝试设计一个聚合过程。我试图避免“expand.grid”引起的问题,即向量长度过大 我设计了一个数据帧数据。最初,我必须对P1和V1以及V2和P2联合应用一个过程。一旦执行,P1、P2、V1和V2必须被删除,并且流程输出两个向量:P12和V12添加到数据帧数据,然后再次将流程应用到向量V12和P12以及V3和P3。因此,在删除V3和P3之前,应依次添加V123和P123,并将该过程重新应用于V123和P123以及V4和P4。数据框用NA或0填充 需要注意的是,我通常使用n个向量Pi和n个

我正在尝试设计一个聚合过程。我试图避免“expand.grid”引起的问题,即向量长度过大

我设计了一个数据帧数据。最初,我必须对P1和V1以及V2和P2联合应用一个过程。一旦执行,P1、P2、V1和V2必须被删除,并且流程输出两个向量:P12和V12添加到数据帧数据,然后再次将流程应用到向量V12和P12以及V3和P3。因此,在删除V3和P3之前,应依次添加V123和P123,并将该过程重新应用于V123和P123以及V4和P4。数据框用NA或0填充

需要注意的是,我通常使用n个向量Pi和n个向量Vi

数据帧数据:

    P1 P2 P3 P4          V1     V2          V3   V4
  1  0  0  0  0  0.34505340 0.9498 0.958886346 0.88
  2  1  1  1  1  0.11640585 0.0338 0.012040961 0.04
  3  2  2  2  2  0.09746205 0.0164 0.009259039 0.08
  4  3  0  3  0  0.11484475 0.0000 0.019813654 0.00
  5  4  0  0  0  0.32623395 0.0000 0.000000000 0.00
输出示例:

      P12     V12    
 1      0  0.1851 
 2      1  0.1419 
 3      2  0.1794 
 4      3  0.1395 
 5      4  0.3659 
 6      5 -0.0045 
 7      6 -0.0141 
亲切问候,,
majesus

您可以使用dplyr执行以下操作,以增量方式对列进行变异。我将目标变量名和公式存储在字符串中。这只是一个简单的例子来说明该方法。我想你的计算要复杂一点

df <- data.frame(p1 = 0:4
                 ,p2 = c(0,1,2,0,0)
                 ,p3 = c(0:3,0)
                 ,p4 = c(0,1,2,0,0)
                 ,v1 = rnorm(5)
                 ,v2 = rnorm(5)
                 ,v3 = rnorm(5)
                 ,v5 = rnorm(5))

library(dplyr)
var <- sapply(2:4,function(x) paste0('p',paste0(1:x, collapse="")))

form <- sapply(2:4,function(x) paste0("p",paste0(1:(x-1),collapse = ""),"*","p",x))

df %>% mutate_(.dots=setNames(form, var))
结果:

p1 p2 p3 p4         v1         v2         v3         v5 p12 p123 p1234
 0  0  0  0  0.6901867  0.6365963  0.3526106 -0.8348200   0    0     0
 1  1  1  1  0.1530939  0.8553939  1.2160768  3.1494818   1    1     1
 2  2  2  2  1.2732477 -0.3102100  1.2538673  0.8904290   4    8    16
 3  0  3  0  0.9067448  0.7085275 -1.0328784  0.1979246   0    0     0
 4  0  0  0 -0.1388101  0.1275527  1.6018554  0.4335777   0    0     0

能否显示输出样本数据集?我正在试图了解您手术后P12或V12的情况。衷心感谢您的回复。我的任务是联合应用变量Pi和Vi的过程,而不仅仅是Pi。此外,在“功能”模式下对流程进行编程对我来说并不容易。我可以使用“while”或“for loop”吗?答案只是一个例子。事实上,这是一个循环。mutate_u命令按顺序计算向量形式中的每个计算。因此,您需要确保在这个向量中还有v12 v123和v1234的计算。这太棒了!非常感谢你。
p1 p2 p3 p4         v1         v2         v3         v5 p12 p123 p1234
 0  0  0  0  0.6901867  0.6365963  0.3526106 -0.8348200   0    0     0
 1  1  1  1  0.1530939  0.8553939  1.2160768  3.1494818   1    1     1
 2  2  2  2  1.2732477 -0.3102100  1.2538673  0.8904290   4    8    16
 3  0  3  0  0.9067448  0.7085275 -1.0328784  0.1979246   0    0     0
 4  0  0  0 -0.1388101  0.1275527  1.6018554  0.4335777   0    0     0