2016-04-26 7 views
2

Here is a link to my data。それは次のようになります。同社は、データに表示されている最初の年を返しますRループロングデータ戻り最小値と累積値

  1. year_first、(例えばこれは "次のようになります。

    year cars company 
    1975 11.75 chevy 
    1976 19.71 chevy 
    1977 21.23 chevy 
    1978 11.00 chevy 
    1979 8.26 chevy 
    1980 8.63 chevy 
    1981 19.09 chevy 
    1982 30.52 chevy 
    1983 27.51 chevy 
    

    私は2つの新しい変数の列を作成したいのですが1975" 年には、特定の会社のためにすべての車の累計を返しますシェビーすべてのための 『』行)

  2. cars_cumulativeは、私は自分のデータが欲しい、

したがって、その時点までに生産さこのようにするには:

year cars company year_first cars_cumulative 
1975 11.75 chevy 1975  11.75 
1976 19.71 chevy 1975  31.46 
1977 21.23 chevy 1975  52.69 
1978 11.00 chevy 1975  63.69 
1979 8.26 chevy 1975  71.95 
1980 8.63 chevy 1975  80.58 
1981 19.09 chevy 1975  99.67 
1982 30.52 chevy 1975  130.19 
1983 27.51 chevy 1975  157.70 

私はforループを書くべきでしょうか?私はそれを行う最善の方法を確信していません。

答えて

6

次の基本R技術はdata.frameのDFのために働くべきである:

df <- data.frame(year=1975:1983, 
       cars=c(11.75, 19.71, 21.23, 11, 8.26, 8.63, 19.09, 30.52, 27.51), 
       company=rep("chevy", length(1975:1983))) 
# add variables 
df$year_first <- ave(df$year, df$company, FUN=min) 
df$cars_cumulative <- ave(df$cars, df$company, FUN=cumsum) 

@rawr挙げいい添加は、これらのラインは、上記データを使用するようにRを指示withinに包まれ得ることです参照の最初のポイントとして.frame:

within(df, { 
    year_first <- ave(year, company, FUN=min) 
    cars_cumulative <- ave(cars, company, FUN=cumsum) 
}) 

withinないだけの使用が読みコードが容易になり、多くの「DF $」のプレフィックスの入力を保存しますが、それはまた、あなたのコードを整理するのに役立ちますあなたがすべての創造をすることができるように1つのコードブロックに追加することができます。

あなたが簡潔なコードのように、非常に大きなデータセットで作業し、またはしている場合、あなたはdata.tableを見てかかることがあります:

library(data.table) 
setDT(df) 
df[, c("year_first", "cars_cumulative"):=list(min(year), cumsum(cars)), by="company"] 
# or 
df[, `:=`(year_first = year[1L], cars_cumulative = cumsum(cars)), by=company] 

またはdplyrと:

library(dplyr) 
df2 = df %>% group_by(company) %>% 
    mutate(year_first = first(year), cars_cumulative = cumsum(cars)) 
+1

私が最初に見てみましょうdata.tableメソッドでクラックします。改善がある場合、私はそれらを学ぶことを喜んでいるでしょう。 – lmo

+0

OK @フランク。編集してください。 – lmo

+0

これは完璧です。アベニュー機能については決して知らなかった。信じられないほど役に立つ。ありがとう! @フランク – Jim