繁体   English   中英

R:根据另一列的值将其他行的值附加到当前行

[英]R: append values of other rows to current row based on value of another column

我有一个类似以下的数据框(alter.hh2):

       wk         hh          brd     count       flavor mean_multi  h_size
    1  W52        1213        546        1          PEACH    2.11          2
    2  W52        4493        546        1          BBA      1.63          2
    5  W53        2093        5367       4          PEA      2.12          2
    6  W53        2043        5366       5          RBYA     1.93          1
    9  W53        2093        546        8          VANI     1.78          2

对于每一行,我想将同一周的flavor(如果有不同的值),mean_multi和brd的值附加到其上,如下所示,同时保持其余各行的其余值不变:

 wk     hh     brd  count    flavor mean_multi  h_size flavor2 brd2 mean_multi2
 W52    1213   546   1      PEACH    2.11       2      BBA     546   1.63
 W52    4493   546   1      BBA      1.63       2      PEACH   546   2.11
 W53    2093   5367  4      PEA      2.12       2      RBYA    5367  1.93
 W53    2043   5366  5      RBYA     1.93       1      PEA     5366  2.12

如果每周有两个以上的值,我希望结果(迭代地)如下所示:

  wk    hh  brd  count flavor mean_multi h_size flavor2 brd2 mean_multi2 flavor3 brd3 mean_multi3
  W53   2093  5367  4     PEA    2.12       2   RBYA   5366  1.93          VANI   546  1.78   
  W53   2043  5366  5     RBYA   1.93       1   PEA    5367  2.12          VANI   546  1.78   
  W53   2093  546   8     VANI   1.78       2   PEA    5367  2.12          RBYA  5366  1.93  

我已经尝试过通过重塑软件包使用以下代码,但是似乎没有给我期望的结果:

 w <- reshape(alter.hh2, 
         timevar = c("flavor","wk"),
         idvar = c("count", "hh"),
         direction = "wide")     

会不会有任何见解!

我们可以使用data.table 如果每个“ wk”('nm1')的值不同,则获取我们需要附加的列名(即“ brd”,“ flavor”,“ mean_multi”)。 将'data.frame'转换为'data.table'( setDT(alter.hh2) ),按'hh'分组,我们选择第一行( head(.SD, 1) ),然后按'wk'分组,然后指定.SDcols ,我们循环遍历.SDcols的列并得到相反的结果,并将输出分配( := )到新列。

library(data.table)
nm1 <- names(alter.hh2)[c(3, 5, 6)]
setDT(alter.hh2)[,head(.SD, 1) , hh][, paste0(nm1, 2) := lapply(.SD, rev), 
           by = wk, .SDcols = nm1][]
#     hh  wk  brd count flavor mean_multi h_size brd2 flavor2 mean_multi2
#1: 1213 W52  546     1  PEACH       2.11      2  546     BBA        1.63
#2: 4493 W52  546     1    BBA       1.63      2  546   PEACH        2.11
#3: 2093 W53 5367     4    PEA       2.12      2 5367     PEA        2.12
#4: 2043 W53 5366     5   RBYA       1.93      1 5366    RBYA        1.93

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM