2017-09-18 4 views
1

2つの数値データ列と1つの識別子を持つrのデータセットがあります。いくつかの行は同じ識別子を共有します(つまり、それらは同じ個人です)が、異なるデータを含みます。私は識別子を使用して識別子を共有する行を列から列に移動したいと考えています。現在600行ありますが、400が必要です。識別子を使用してRの列に行を移動する

誰かがこれを行う可能性のあるコードを共有できますか?私はRの新人ですし、改造(キャスト)プログラムを試しましたが、実際にそれをフォローすることはできませんし、まさに私がやろうとしていることではありません。

ありがとうございました。

UPDATE:

現在

ID Age Sex 
1 3 1 
1 5 1 
1 6 1 
1 7 1 
2 1 2 
2 12 2 
2 5 2 
3 3 1 

の予想される出力

ID Age Sex Age2 Sex2 Age3 Sex3 Age4 Sex4 
1 3 1 5 1  6 1 7 1 
2 1 2 12 2  5 2 
3 3 1 

UPDATE 2:

これまでのところ私はreshape2から溶融とdcastコマンドを使用して試してみました。私はそこに着いていますが、それはまだかなりよく見えません。ここに私のコードです:

x <- melt(example, id.vars = "ID") 

x$time <- ave(x$ID, x$ID, FUN = seq_along) 

example2 <- dcast (x, ID ~ time, value.var = "value") 

、ここでそのコードを使用して出力されます。

ID A B C D  E F G H (for clarity i have labelled these) 
1 3 5 6 7  1 1 1 1 
2 1 12 5 2  2 2 
3 3 1 

だから、あなたはおそらく見ることができるように、それは「セックス」と「時代」の変数を混合して、それらを同じ列に組み合わせるたとえば、列Dは、人1(年齢4)では値「7」を持ちますが、人2(「性別」)では「2」です。私のコードは、数値の値をどこにキャストすべきかを指示していませんが、その部分のコード方法はわかりません。何か案は?

+0

はその – akrun

+1

'edit'してくださいあなたのポストに基づいて小さな再現性の例と期待される出力を示し、 – akrun

+0

にそれを、それを更新してくださいあなたが試したこと、その試行で何が間違っていたのか、他に何を試みたのかを示すのに役立ちます。他人があなたのためにコードを書くだけの場所ではありません – workabyte

答えて

1

ここtidyrパッケージからgatherspreaduniteを使用してのアプローチです:

suppressPackageStartupMessages(library(tidyverse)) 
x <- tribble(
    ~ID, ~Age, ~Sex, 
    1, 3, 1, 
    1, 5, 1, 
    1, 6, 1, 
    1, 7, 1, 
    2, 1, 2, 
    2, 12, 2, 
    2, 5, 2, 
    3, 3, 1 
) 

x %>% group_by(ID) %>% 
    mutate(grp = 1:n()) %>% 
    gather(var, val, -ID, -grp) %>% 
    unite("var_grp", var, grp, sep ='') %>% 
    spread(var_grp, val, fill = '') 
#> # A tibble: 3 x 9 
#> # Groups: ID [3] 
#>  ID Age1 Age2 Age3 Age4 Sex1 Sex2 Sex3 Sex4 
#> * <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> 
#> 1  1  3  5  6  7  1  1  1  1 
#> 2  2  1 12  5   2  2  2  
#> 3  3  3      1 

あなたは数値列を維持することを好む場合は、ちょうどspread(var_grp, val, fill = '')からfill=''引数を削除。これに役立つかもしれない

その他の質問が含まれます:

R spreading multiple columns with tidyr

How can I spread repeated measures of multiple variables into wide format?

+0

あなたの助けてくれてありがとうございました - これはこの特定の問題のために働いていました。私は今、実際のデータセットにそれを適用しようとします。 – abbg662

関連する問題