2016-04-15 7 views
2

データを再形成しようとしていますが、いくつかの条件があります。データは以下のようになります。このように繰り返しているIDが多くなりますデータの形を変更するR

S.No  Count ID  Type 
    1   135 350  A 
    2   114 350  A 
    3   84 350  A 
    4   80 350  A 
    5   19 350  A 
    6   8 350  A 
    7   21 350  A 
    8   88 350  B 
    9  111 350  B 
    10  46 350  B 
    11  108 350  B 
    12  19  352  A 
    13  117 352  A 
    14  167 352  B 

そして私は以下のように変換する必要があります。 MAX(count_typeのB)タイプの =カウントより高いMAX(count_typeのB)タイプAの =カウントより最大count_type Bの数
Count_typeA_high未満であるより

S.No ID Type Count_type B Count_typeA_less than  Count_typeA 
             max(count_type B)  high than 
                  max(count_type B) 
1  350 B  88,111,46,108  84,80,19,8,21    135,114 
2  352 B  167     19,117      NA 

Count_typeA_Less count_typeの最大数B

私はdplyrで試してみました。私はこれを達成できませんでした。 R.

+0

出力がどのような構造になっているかはっきりしません。それはデータフレームですか?そしてもしそうなら、単一の値「88,111,46,108」が結合されているか、またはこれらが4つの場合(4つの別個の値)であるべきか?あるいは、 'count type A 'が' max(count type B) 'より小さいか大きいかを各行に示す追加の変数を持つだけで十分ですか? (カウントタイプAがカウントタイプBに等しい場合はどうなりますか?) – Daniel

+0

お返事ありがとうございました。はい、データフレームにする必要があります。私が持っているデータには、このように異なるIDを持つ1000の観測があります。第二に、私はカウントがカンマで区切られる単一の値としてそれを必要とします。最後に、カウントタイプAがカウントタイプBに等しい場合は、等しくなる(これも単一値である) – ssan

+0

という数を示す別の列が、これらの列は文字ベクトルである必要がありますか?たとえば、列**の最初の値Count_typeA_less max(count B)**は「88,111,46,108」ですか? – Daniel

答えて

1

で上記の状況のた​​めに私を導いてください、次はあなたが求めているものを、本質的にやるようだ:

library(data.table) 
setDT(mydf) 

mydf[, list(type_B = toString(Count[Type == "B"]), 
      type_A_lt_mB = toString(Count[Type == "A" & Count < max(Count[Type == "B"])]), 
      type_A_gt_mB = toString(Count[Type == "A" & Count > max(Count[Type == "B"])])), ID] 
##  ID   type_B  type_A_lt_mB type_A_gt_mB 
## 1: 350 88, 111, 46, 108 84, 80, 19, 8, 21  135, 114 
## 2: 352    167   19, 117 

ここで私が使用した出発data.frameです:

mydf <- structure(list(Count = c(135L, 114L, 84L, 80L, 19L, 8L, 21L, 
    88L, 111L, 46L, 108L, 19L, 117L, 167L), ID = c(350L, 350L, 350L, 
    350L, 350L, 350L, 350L, 350L, 350L, 350L, 350L, 352L, 352L, 352L 
    ), Type = c("A", "A", "A", "A", "A", "A", "A", "B", "B", "B", 
    "B", "A", "A", "B")), .Names = c("Count", "ID", "Type"), row.names = c(NA, 
    14L), class = "data.frame") 

を私は削除が「S.no」の列は質問に全く無関係であると思われるためです。

関連する問題