このデータETLをPythonで処理できました。しかし、私はRと統合する必要があり、私はRを初めて使うので、ここで質問を投稿します。私はタイプSTART_DATEとEND_DATEに基づいて、日付を爆発したいと変数の「種類」ダミー変数の累積合計をR
元のデータが変数名START_DATE、END_DATEと3列があり、由来ダミー変数の上に合計する累積頻度を行う
start_date, end_date, type
1/1/2016, 1/3/2016, A
1/2/2016, 1/2/2016, B
1/2/2016, 1/3/2016, A
ここで私が達成しようとしたことの説明です。
レコードの1行目の場合、A型は毎日1/1から1/3(開始日と終了日が含まれます)に表示されます。
2行目には、B型が1/2にのみ表示されます。
これまでのところ、1/1には「A」、1/2には「A」と「B」、1/3には「A」が1つあります。
このようなプロセスは残りのレコードに対して繰り返されます。実際には、私は変数 "タイプ"で多くの行と異なる値を持っています
基本的には、変数 "タイプ"のすべての変数の頻度カウントを毎日行い、変数「型」のすべての固有変数のインデックス列としての日付と対応する頻度カウントのデータフレーム。それが明確になることを願っています。
私は予想通りティファニーのソリューションが動作しませんでした@それはそう
date, A, B
1/1/2016, 1, 0
1/2/2016, 2, 1
1/3/2016, 2, 0
新しいヘッダーとして最初の行では、次の形式のデータフレームを必要とします。彼/彼女の入れ子にされたループコード部分は私の次のサンプルコードのために分解する。
start_date end_date type
1/1/16 1/3/16 A
1/1/16 1/3/16 A
1/1/16 1/8/16 B
1/1/16 1/14/16 B
1/5/16 1/19/16 B
1/7/16 1/13/16 C
1/9/16 1/18/16 A
1/13/16 1/19/16 D
1/13/16 1/19/16 A
1/14/16 1/22/16 B
1/15/16 1/29/16 B
1/16/16 1/22/16 D
正しい部分がある:事前に助けを
results <- data.frame(date = dates)
for(t in unique(df$type)) {
for(d in dates) {
results[results$date == d, t] <-
length(df[df$start_date <= d & df$end_date >= d & df$type == t],'type')
}
}
感謝。私はstackoverフローコミュニティの精神で怠惰はないです表示するには、これは私が書いたPythonのバージョンです:
import pandas as pd
df = pd.read_csv("dates.csv")
factor_type = list(df['type'].unique())
columns = ['date']
columns.extend(factor_type)
result = []
dates_dict = {}
i = 0
for index,row in df.iterrows():
start_end = pd.date_range(row['start_date'], row['end_date'])
factor = row['variable_type']
factor_index = factor_type.index(factor)
for x in start_end:
date_obj = x.date()
date_str = '%s/%s/%s' % (date_obj.month, date_obj.day,date_obj.year)
if date_str in dates_dict:
row_index = dates_dict[date_str]
result[row_index+1][factor_index+1]+=1
else:
dummy_row = [0]*len(factor_type)
dummy_row[factor_index]=1
result.append([date_str]+dummy_row)
dates_dict[date_str]=i+1
result_df = pd.DataFrame(result,columns=columns)
dcast
を使用して、あなたの入力と所望の出力との間のマッピングは明らかではありません。解説してください。 – MichaelChirico'A'カラムは2行目に1を入れてはいけませんか?もしそうなら、次のオプションは' library(data.table); by = c( "indx"、 "value"))、value〜type) 'dx(Dx) –
ここでは、start_dateとend_dateの両方がカウントに含まれています。言い換えれば、両端の閉じた間隔です。 – Jin