3

こんにちは、私は R が初めてで、質問があります。約 100 か国の 1960 年から 2012 年までの約 30 種類の統計を含む data.frame (df) があります。以下に例を示します。

     Country      Statistic.Type     1960      1961      1962      1963 ...  2012 
__________________________________________________________________________________
1    Albania      Death Rate          10        21        13        24        25  
2    Albania      Birth Rate          7         15        6         10        9  
3    Albania      Life Expectancy     8         12        10        7         20  
4    Albania      Population          10        30        27        18        13
5    Brazil       Death Rate          14        20        22        13        18
6    Brazil       Birth Rate          ...  
7    Brazil       Life Expectancy     ...  
8    Brazil       Population          ...  
9    Cambodia     Death Rate          ...  
10   Cambodia     Birth Rate          ...                  etc...

合計で 55 の列があり、53 年の列のそれぞれの値は、この質問の目的のために作成されていることに注意してください。

国と統計タイプを入力として受け取り、特定の国と統計タイプの年と各年の値を示す 2 つの列を持つ新しい data.frame を返す関数を作成するのに助けが必要です。たとえば、country=Brazil と statistic.type=Death Rate を関数に入力すると、新しい data.frame は次のようになります。

     Year    Value 
_____________________
1    1960     14
2    1961     20
3    1962     22
...
51   2012     18

これを行う方法がわかりません。インストールするアイデア/コード/パッケージを誰かが教えてくれれば、それは非常に役に立ちます。

どうもありがとう!

4

3 に答える 3

0

国ごとのデータセットを作成するには、データセット全体に対して何らかの分割操作を行う必要があるでしょう。 https://stat.ethz.ch/pipermail/r-help/2008-February/155328.html

次に、データのサブセットごとに融解関数を使用します。あなたの場合、 http://www.statmethods.net/management/reshape.htmlから適応され、 mydata はすでに分割されたデータです:

    % example of melt function 
    library(reshape)
    mdata <- melt(mydata, id=c("Year"))

それだ。

于 2013-05-18T21:09:44.423 に答える
0

と組み合わせsubsetstack、おそらくgsubそこに a を使用して、年の列に数字のみを残すことができます。

df <- expand.grid(
  "country" = c("A", "B"),
  "statistic" =  c("c", "d", "e", "f"),
  stringsAsFactors = FALSE)

df$year1980 <- rnorm(8)
df$year1990 <- rnorm(8)
df$year2000 <- rnorm(8)


getYears <- function(input, cntry, stat) {
  x <- subset(input, country == cntry & stat == statistic,
    select = -c(country, statistic))
  x <- stack(x)[,c("ind", "values")]
  x$ind <- gsub("\\D", "", x$ind)
  x
}


getYears(df, "A", "c")

   ind     values
1 1980  1.1421309
2 1990  1.0777974
3 2000 -0.2010913
于 2013-05-18T21:16:43.917 に答える