2017-12-07 20 views
0

私は小さなデータセットを持っており、grepl関数を使ってdata.frameをサブセット化しようとしています。以下をループ関数に変換してください。

私は持っています。

year_list <- list("2013", "2014", "2015", "2016", "2017") 

test.2013 <- subset(searches[, 1:2], grepl(year_list[1], searches$date)) 
test.2014 <- subset(searches[, 1:2], grepl(year_list[2], searches$date)) 
test.2015 <- subset(searches[, 1:2], grepl(year_list[3], searches$date)) 
test.2016 <- subset(searches[, 1:2], grepl(year_list[4], searches$date)) 
test.2017 <- subset(searches[, 1:2], grepl(year_list[5], searches$date)) 

私は新しいdata.frameに、列1(date列とhits列)2のサブセットにするためにループを作成しようとしています。

私は、year_listsdateを取るsearches data.frameの列dateにgrepl関数を適用し、新しいdata.frameにこれらの値を返すようにしようとしているが、ループ機能や、私が現在持っているものよりも少ない繰り返し何かを使用しています。

DATAFRAME

  date hits   keyword geo gprop category 
1: 2013-01-06 23 Price world web  0 
2: 2013-01-13 23 Price world web  0 
3: 2013-01-20 40 Price world web  0 
4: 2013-01-27 25 Price world web  0 
5: 2013-02-03 21 Price world web  0 
6: 2013-02-10 19 Price world web  0 
+1

あなたはdata.tableオブジェクトを使用しています。 – jogo

+1

'library(" lubridate "); 検索[、年:=年(as.Date(date))]今度は 'split(searches、searches [、Year])'を実行できます。 = 'あなたのさらなる計算のための' data.table'のパラメータ。 – jogo

答えて

1

私の理解は、あなたが日付列内のエントリに基づいて、いくつかのdata.frames S内にdata.frameを分割することを正しい場合は、リストを作成し、次の解決策を検討するかもしれません所望のdata.frameサブセットはsplitを使用します。私はあなたのデータを(data.tableとしてではなく)使用し、追加の年を表す2行を導入しました。私の理解が正しいことを願っています。

df <- read.table(text = " 
date hits   keyword geo gprop category 
2013-01-06 23 Price world web  0 
2013-01-13 23 Price world web  0 
2013-01-20 40 Price world web  0 
2013-01-27 25 Price world web  0 
2013-02-03 21 Price world web  0 
2013-02-10 19 Price world web  0 
2014-02-03 21 Price world web  0 
2014-02-10 19 Price world web  0 
", header = T, stringsAsFactors = F) 

#extract only the four first digits from date column 
#to generate splitting groups 
df_split <- split(df[, c("date", "hits")], gsub("(\\d{4})(.*$)", "\\1", df$date)) 

df_split 
# $`2013` 
#  date hits 
# 1 2013-01-06 23 
# 2 2013-01-13 23 
# 3 2013-01-20 40 
# 4 2013-01-27 25 
# 5 2013-02-03 21 
# 6 2013-02-10 19 
# 
# $`2014` 
#  date hits 
# 7 2014-02-03 21 
# 8 2014-02-10 19 
+0

私はあなたの方法に従っていましたが、一度分割したdata.frameに入れることはできませんでした。 – user113156

+0

私は以下の作業をしています。 'func < - for(i in 1:5){ df <-subset [1:3]、grepl(year_list [i]、$ dateを検索)) print(df) } data < - data.frame(df) ' - これは昨年だけ「保存」する方法私は新しいdata.frameを持っていますが、2017だけです。私は2013年までのすべての年のdata.frameを作成しようとしています – user113156

+1

'data.frame'をなぜ別の変数として使用するのですか? 'df_split [[" 2013 "]]'のように、リスト構造内のそれぞれにアクセスすることができます。個別の変数を作成することを強くお望みなら、[この回答](https://stackoverflow.com/questions/16566799/change-variable-name-in-for-loop-using-r)に基づいて解決策を提供することができます。しかし、そこには、このアプローチに従わないことが強調されています。あなたのループに関しては、あなたのforループの中で各反復であなたのdfを上書きするので、最後のものだけがループを生き延びます。 –

関連する問題