2
を変えるまで:R:複数行の上に値を渡し、別の列の値が、私は次の形式で顧客の活動データを持っている
id = rep(1:2, each = 7)
week = rep(22:28, 2)
orders_num = c(NA, 1,0,0,0,3,0,1,4,0,0,1,0,0)
orders_char = c("none", "1", "none", "none", "none", "2+", "none", "1", "2+", "none", "none","1", "none", "none")
activity =c(NA, "active", "lapsed1", "lapsed2", "lapsed3", "active", "lapsed1", "active", "active", "lapsed1", "lapsed2" , "active", "lapsed1", "lapsed2")
df = data.frame(cbind(id, week, orders_num, orders_char, activity))
df
id week orders_num orders_char activity
1 22 <NA> none <NA>
1 23 1 1 active
1 24 0 none lapsed1
1 25 0 none lapsed2
1 26 0 none lapsed3
1 27 3 2+ active
1 28 0 none lapsed1
2 22 1 1 active
2 23 4 2+ active
2 24 0 none lapsed1
2 25 0 none lapsed2
2 26 1 1 active
2 27 0 none lapsed1
2 28 0 none lapsed2
私はそれだろう列を作成しようとしています単に以前に言及、明らかに
df_solution
id week orders_num orders_char activity final
1 22 <NA> none <NA> <NA>
1 23 1 1 active active_1
1 24 0 none lapsed1 lapsed1_1
1 25 0 none lapsed2 lapsed2_1
1 26 0 none lapsed3 lapsed3_1
1 27 3 2+ active active_2+
1 28 0 none lapsed1 lapsed1_2+
2 22 1 1 active active_1
2 23 4 2+ active active_2+
2 24 0 none lapsed1 lapsed1_2+
2 25 0 none lapsed2 lapsed2_2+
2 26 1 1 active active_1
2 27 0 none lapsed1 lapsed1_1
2 28 0 none lapsed2 lapsed2_1
:activity
の組み合わせとactivity == "active"
場合orders_char
、最新'active'
状況に応じorders_char
とそれぞれ'lapsed'
カテゴリを返します行はlapsed
期間が長く続く場合には仕事に行くされていません。
df %>% group_by(id) %>% arrange(id, week) %>%
mutate(final = ifelse(activity == "active", paste(activity, orders_char, sep="_"),
ifelse(grepl("lapsed", activity), paste(activity, lag(orders_char), sep="_"), NA)))
id week orders_num orders_char activity final
1 22 NA none NA <NA>
1 23 1 1 active active_1
1 24 0 none lapsed1 lapsed1_1
1 25 0 none lapsed2 lapsed2_none
1 26 0 none lapsed3 lapsed3_none
1 27 3 2+ active active_2+
1 28 0 none lapsed1 lapsed1_2+
2 22 1 1 active active_1
2 23 4 2+ active active_2+
2 24 0 none lapsed1 lapsed1_2+
2 25 0 none lapsed2 lapsed2_none
2 26 1 1 active active_1
2 27 0 none lapsed1 lapsed1_1
2 28 0 none lapsed2 lapsed2_none
は、私が他の1つのアクティブ期間からorders_char
値を「修正」する可能性のある方法はありますか?
お寄せいただきありがとうございます!
私は、私がコードが常に正しい値を返すとは限りません。 5行目の 'final'カラムは' lapsed3_1'を返すべきです、7回目は 'lapsed1_2 + 'などを返すべきです。基本的に、' lapsed'セルは 'active'ステータスの' orders_char'値を持っていなければなりません。センス。どのようにこれを達成するための任意の提案?あなたの助けをもう一度ありがとう! –
@KasiaKulma今すぐご確認ください。 'factor'クラスはいくつかの問題を引き起こしたと思います。 – akrun
素晴らしい、これは魅力のように動作します、ありがとう! –