[英]Create a dataframe with all observations unique for one specific column of a dataframe in R
[英]Loop over all observations with a unique value of a variable/column i R
我有如下所示的數據集:
鏈 | 產品 | 星期 | 銷售量 |
---|---|---|---|
鏈1 | 產品1 | 1 | 0 |
鏈1 | 產品1 | 2 | 0 |
-------- | -------- | ----- | ----- |
鏈1 | 產品1 | 51 | 10 |
鏈1 | 產品1 | 52 | 14 |
鏈2 | 產品1 | 1 | 10 |
鏈2 | 產品1 | 2 | 11 |
-------- | -------- | ----- | ----- |
鏈2 | 產品1 | 51 | 12 |
鏈2 | 產品1 | 52 | 15 |
鏈1 | 產品2 | 1 | 3 |
鏈1 | 產品2 | 2 | 4 |
-------- | -------- | ----- | ----- |
鏈1 | 產品2 | 51 | 8 |
鏈1 | 產品2 | 52 | 10 |
鏈2 | 產品2 | 1 | 11 |
鏈2 | 產品2 | 2 | 12 |
-------- | -------- | ----- | ----- |
鏈2 | 產品2 | 51 | 15 |
鏈2 | 產品2 | 52 | 7 |
這意味着我每周都會觀察不同產品和連鎖店的銷售情況。 我想創建一個創新虛擬變量,當推出新產品時它等於 1。 第 51 周的鏈 1 中的產品 1 就是這種情況(這里,假設第 2 周和第 50 周之間的銷售額為 0,第 51 周的銷售額從 0 變為 10)。 然后我希望我的假人 I 為 1:
鏈 | 產品 | 星期 | 銷售量 | 我 |
---|---|---|---|---|
鏈1 | 產品1 | 1 | 0 | 0 |
鏈1 | 產品1 | 2 | 0 | 0 |
-------- | -------- | ----- | ----- | - |
鏈1 | 產品1 | 51 | 10 | 1 |
鏈1 | 產品1 | 52 | 14 | 0 |
鏈2 | 產品1 | 1 | 10 | 0 |
鏈2 | 產品1 | 2 | 11 | 0 |
-------- | -------- | ----- | ----- | - |
鏈2 | 產品1 | 51 | 12 | 0 |
鏈2 | 產品1 | 52 | 15 | 0 |
鏈1 | 產品2 | 1 | 3 | 0 |
鏈1 | 產品2 | 2 | 4 | 0 |
-------- | -------- | ----- | ----- | - |
鏈1 | 產品2 | 51 | 8 | 0 |
鏈1 | 產品2 | 52 | 10 | 0 |
鏈2 | 產品2 | 1 | 11 | 0 |
鏈2 | 產品2 | 2 | 12 | 0 |
-------- | -------- | ----- | ----- | - |
鏈2 | 產品2 | 51 | 15 | 0 |
鏈2 | 產品2 | 52 | 7 | 0 |
我想我應該創建一個循環,循環遍歷每個鏈中每種產品的每周銷售觀察結果,並檢測銷售何時從 0 開始,然后更改為某個值。 這應該如何在 R 中完成?
謝謝你。
對於每個Chain
中的每個Product
,我們可以找到第一次Sale
值大於 0 的行並將該行值更改為 1。如果您的數據稱為df
。
library(dplyr)
df %>%
group_by(Chain, Product) %>%
mutate(I = as.integer(row_number() == match(TRUE, Sale > 0))) -> result
result
我們可以使用base R
df$I <- with(df, ave(Sale > 0, Chain, Product, FUN = which.max))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.