2016-07-18 1 views
0

다른 칼럼의 값에 기초하여 현재의 행을 다른 행의 값을 추가 다음 R은 : 추천 I는 dataframe (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 

각 행

, I의 값을 추가 할 (다른 값의 경우), 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 

각 주에 2 개 이상의 값이 있는지 결과를 다음과 같이 (반복적으로) 나타내겠습니다.

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")  

겠습니까 크게 어떤 통찰력을!

+0

죄송합니다. 원하는 결과를 제공하지 못함 – lll

+0

카운트는 각 hh가 만든 구매 횟수입니다. – lll

+0

"flavor", "mean_multi"및 "brd"의 두 번째 행 값을 첫 번째 행의 일부 새로운 열 값으로 만들고 두 번째 행에 대해 동일한 작업을 수행하려고합니다. 그리고 매주이 과정을 반복합니다. – lll

답변

0

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 
+0

내 데이터에서이 값을 시도했지만 두 값만 사용했습니다. 각 행에 대해 5 개의 값이 있으므로이 값을 조정하려면 위의 코드를 어떻게 조정해야하는지 궁금합니다. – lll

+0

@lll 두 번째 업데이트의 카운트 값이 4, 5 및 8이고 입력 예제의 1과 1이 보이지 않으면 재현 가능한 예제로 게시물을 업데이트하십시오. – akrun