2017-11-20 9 views
0

問題: 既存のデータセットから新しいデータセットを生成する方法。データ構造の変換

私のデータはほんのわずかですが、その中で以下に簡略化したバージョンがあります。データは、性別、出身国、出身国、職場および職業を持つ個人に関するものです。

私は次のように考えています: 1.私はすべてのセクターのX職業の組み合わせを保存した列を作成します。 2.そのようなセクターXの職業ごとに、女性の数、男性の数、各国の数を数えます。

id  <- c(1,2,3,4,5) 
occupation <- c(11,12,11,12,11) 
sector <- c("a", "b", "c", "a", "b") 
sex  <- c(0,1,0,1,0) 
country <- c(1,2,3,2,1) 
data <- data.frame(id, occupation, sector, sex, country) 

id occupation sector sex country 
1 11   a  0 1  
2 12   b  1 2  
3 11   a  0 3   
4 12   a  1 2   
5 11   b  0 1   

これは私が取得したいものです。

occXsector sex0 sex1 country1 country2 country3 
1 11-a  0 2 1  0  1 
2 11-b  0 1 1  0  0 
3 12-a  1 0 0  1  0 
4 12-b  1 0 0  1  0 

すべてのヘルプははるかに高く評価されるだろう!

答えて

3

あなたはあなたの入力/出力をクリーンアップする必要があります、それは、あなたが与える入力から意味をなさないが、与えるものではありません示し期待される出力は、この

library(dplyr) 
library(tidyr) 
data %>% 
    mutate(occXsector = paste(occupation, sector, sep="-")) %>% 
    gather(key, value, sex, country) %>% 
    mutate(newvalue = paste(key, value, sep="")) %>% 
    group_by(occXsector) %>% 
    count(newvalue) %>% 
    spread(newvalue, n, fill=0) 

# A tibble: 5 x 6 
# Groups: occXsector [5] 
    occXsector country1 country2 country3 sex0 sex1 
*  <chr> <dbl> <dbl> <dbl> <dbl> <dbl> 
1  11-a  1  0  0  1  0 
2  11-b  1  0  0  1  0 
3  11-c  0  0  1  1  0 
4  12-a  0  1  0  0  1 
5  12-b  0  1  0  0  1  
+0

感謝を試しています!これは素晴らしい作品です!私はあなたがそこで何をしたかで頭を包むのに時間がかかるだろうが、それはすばらしい。 – cremorna

関連する問題