さまざまなメトリックについて、一意の変数名で変数を合計する-変数名のプレフィックスの前後に一意の名前を見つける必要があります

H.チャン

データフレーム内のすべての一意の変数名(コークスやペプシなどのブランド)の変数(売上や単位など)を合計する方法はありますか?参考までに、ここにいくつかのサンプルデータがあります。

set.seed(123)
period <- seq(as.Date('2021/01/01'), as.Date('2021/01/07'), by="day")
Coke_Regular_Units <- sample(1000:2000, 7, replace = TRUE)
Coke_Diet_Units <- sample(1000:2000, 7, replace = TRUE)
Coke_Regular_Sales <- sample(500:1000,7, replace = TRUE)
Coke_Diet_Sales <- sample(500:1000, 7, replace = TRUE)
Pepsi_Regular_Units  <- sample(1000:2000, 7, replace = TRUE)
Pepsi_Diet_Units  <- sample(1000:2000, 7, replace = TRUE)
Pepsi_Regular_Sales <- sample(500:1000, 7, replace = TRUE)
Pepsi_Diet_Sales <- sample(500:1000, 7, replace = TRUE)
df <- data.frame(Coke_Regular_Units, Coke_Diet_Units, Coke_Regular_Sales, Coke_Diet_Sales, 
                 Pepsi_Regular_Units, Pepsi_Diet_Units, Pepsi_Regular_Sales, Pepsi_Diet_Sales)

> head(df)
      period Coke_Regular_Units Coke_Diet_Units Coke_Regular_Sales Coke_Diet_Sales Pepsi_Regular_Units
1 2021-01-01               1414            1117                589             847                1425
2 2021-01-02               1462            1298                590             636                1648
3 2021-01-03               1178            1228                755             976                1765
4 2021-01-04               1525            1243                696             854                1210
5 2021-01-05               1194            1013                998             827                1931
6 2021-01-06               1937            1373                590             525                1589
  Pepsi_Diet_Units Pepsi_Regular_Sales Pepsi_Diet_Sales
1             1554                 608              943
2             1870                 762              808
3             1372                 892              634
4             1843                 924              808
5             1142                 829              910
6             1543                 522              723

Coke_Sales、Coke_Units、Pepsi_Sales、Pepsi_Units、Regular_Sales、Diet_Unitsを自動的に計算するコードが好きです。

私は現在、変数ごとにこのようにしています

library(dplyr) 
df$Coke_Sales <- rowSums(Filter(is.numeric, select(df, (matches("Coke") & matches("Sales")))))
df$Coke_Units <- rowSums(Filter(is.numeric, select(df, (matches("Coke") & matches("Units")))))

これは少数の変数では問題ありませんが、数百の変数でこれを行う必要があります。これを可能にする機能はありますか?Coke、Pepsi、Diet、Regularなどの一意の変数名を自動的に見つける必要があります。メトリックは変数名の最後の部分であるため、必ずしもこれを自動検索する必要はありませんが、すばらしいでしょう。簡単にできる場合は、最大で3つのメトリックしかないため、メトリックを指定してもかまいませんが、ブランドは数百あります。

自動化できない場合は、必要な変数を指定して簡略化できる方法はありますか。完璧ではありませんが、それでも改善されています。たとえば、これらのコード行を含めて、合計する変数と必要なメトリックを指定します。

VarsToSum <- c("Coke", "Pepsi", "Diet", "Regular")
Metrics <- c("Sales", "Units")

それがそのように達成できない場合、多分私はより小さなステップに分割する必要があります、どんなヒントも素晴らしいでしょう。その方法を考えようとすると、接頭辞「_」の前にある一意の名前を見つけて、それらの一意の名前の「Sales」と「Units」を計算する必要があります。これが最善の方法でしょうか?または、データの形状を変更する必要がありますか?そこに行くための他のルートはありますか?

これを達成するための助けや指示をいただければ幸いです。ありがとう

ペナント

ここにdata.tableアプローチがあります...

library( data.table )
setDT(df) #make it a data.table
#melt to long
ans <- melt( df, id.vars = "period", variable.factor = FALSE )
#split variable to 3 new columns
ans[, c("brand", "type", "what") := tstrsplit( variable, "_" ) ]
# > head(ans)
#        period           variable value brand    type  what
# 1: 2021-01-01 Coke_Regular_Units  1414  Coke Regular Units
# 2: 2021-01-02 Coke_Regular_Units  1462  Coke Regular Units
# 3: 2021-01-03 Coke_Regular_Units  1178  Coke Regular Units
# 4: 2021-01-04 Coke_Regular_Units  1525  Coke Regular Units
# 5: 2021-01-05 Coke_Regular_Units  1194  Coke Regular Units
# 6: 2021-01-06 Coke_Regular_Units  1937  Coke Regular Units

#summarise however you like
ans[, .(total = sum(value) ), by = .(brand, type, what)]
#    brand    type  what total
# 1:  Coke Regular Units 10527
# 2:  Coke    Diet Units  8936
# 3:  Coke Regular Sales  5158
# 4:  Coke    Diet Sales  5171
# 5: Pepsi Regular Units 11160
# 6: Pepsi    Diet Units 10813
# 7: Pepsi Regular Sales  5447
# 8: Pepsi    Diet Sales  5491

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ