如何从一组行中选择某些行和某些列并将它们转换为一行然后将它们与数据框绑定?

时间:2017-06-30 02:24:39

标签: r vectorization

如何从一组行中选择某些行和某些列并将它们转换为一行然后将它们与数据框绑定?

请参阅Example df,有第1组和第2组,每组有6行。

该小组的

1st行,选择该Weight&组的第1,2和3行Height& Volume并将它们转换为一行并将它们绑定到数据框。

该小组的

2nd行,选择该Weight&组的第1,2和3行Height& Volume并将它们转换为一行并将它们绑定到数据框。

该小组的

3rd行,选择该Weight&组的第2,3和4行Height& Volume并将它们转换为一行并将它们绑定到数据框。

该小组的

4th行,选择该Weight&组中的第3,4和5行Height& Volume并将它们转换为一行并将它们绑定到数据框。

该小组的

5th行,选择该Weight&组的第4,5和6行Height& Volume并将它们转换为一行并将它们绑定到数据框。

该小组的

6th行,选择该Weight&组的第4,5和6行Height& Volume并将它们转换为一行并将它们绑定到数据框。

会变成类似Expected Outcome的东西。 如何实现这种矢量化方式?

更新:我有我想要实现的目标,但有更有效的方法吗?

# create a column to store the row indexes 
df$row = rownames(df)
# choose the first row of every group, and store the indexes into "first"
library(plyr)
df$V1 = 0
df$V2 = 0
df$V3 = 0
first = ddply(df, .(Group), function(x) x[ 1 , ])$row 
second= ddply(df, .(Group), function(x) x[ 2 , ])$row 
third = ddply(df, .(Group), function(x) x[ 3 , ])$row 
df$V1[first] = df$Weight[first]
df$V2[first] = df$Height[first]
df$V3[first] = df$Volume[first]

#....so on and do the rest of the V4~6

示例df

    Weight Height Volume Group   
 1:   11    12      17     1
 2:   25    17      19     1
 3:   29    25      20     1
 4:   34    35      27     1
 5:   39    36      31     1
 6:   18    20      37     1
 7:    9    12       4     2
 8:   10    33       7     2
 9:   18    25      19     2
10:   26    19      20     2
11:   27    22      25     2
12:   38    59      36     2

预期结果

    Weight Height Volume Group   V1 V2 V3 V4 V5 V6 V7 V8 V9
 1:   11    12      17     1     11 12 17 29 25 20 29 25 20 
 2:   25    17      19     1     11 12 17 29 25 20 29 25 20 
 3:   29    25      20     1     25 17 19 29 25 20 34 35 27
 4:   34    35      27     1     29 25 20 34 35 27 39 36 31
 5:   39    36      31     1     34 35 27 39 36 31 18 20 37
 6:   18    20      37     1     34 35 27 39 36 31 18 20 37
 7:    9    12       4     2      9 12  4 10 33  7 18 25 19
 8:   10    33       7     2      9 12  4 10 33  7 18 25 19
 9:   18    25      19     2     10 33  7 18 25 19 26 19 20
10:   26    19      20     2     18 25 19 26 19 20 27 22 25
11:   27    22      25     2     26 19 20 27 22 25 38 59 36
12:   38    59      36     2     26 19 20 27 22 25 38 59 36

0 个答案:

没有答案