私は簡単な作業で助けが必要だと私は信じています。私はRの関数にそれほど慣れていません。 2つのデータフレーム(df1とdf2)があり、私は次のようにしたいと思います:ピボットテーブルの機能とマージR
1)df1を列値(出力= A)でフィルタリングします。 2)A(出力= B)からピボットテーブルを生成する。
3)Bの列の名前を変更します。 4)このピボットテーブルBを第2のデータフレームdf2(出力= C)とマージする。
5)私はこの作業を13回実行したい
C.
から列の値によってDF2から列の値を分割、それは私がfunction
/
loop
/
lapply
を使用したいと思っ理由です私の人生を楽にしてくれるようなやり方があります。
私が見るように、Rでは通常、lapplyを使用する方が良いです。直感的に、私はこの仕事のために何らかの種類の関数またはループを使用します。
2つの変数(MLBとD)の再現可能な例を以下で確認してください。
library(dplyr)
df<- as.data.frame(cbind(c("NC_1","NC_1","NC_2","NC_2","NC_2","NC_1","NC_1","NC_1","NC_2","NC_1"),
c("MLB","MLB","MLB","MLB","MLB","MLB","D","D","D","D"),
c("ATT","ATT","ATT","ATT1","ATT1","ATT1","ATT1","ATT1","ATT1","ATT1")))
names(df) <- c("TAG", "ST", "ATR")
general.table<-table(df$TAG)
general.table<-as.data.frame(general.table)
names(general.table) <- c("TAG", "OCC")
# MLB
MLB.df<-filter(df, grepl('MLB', ST)) # 1) Filter
MLB.df.table<-as.data.frame(table(MLB.df$TAG)) # 2) Pivot Table
names(MLB.df.table)<-c("TAG", "Partial_Score") # 3) Rename
MLB.df.final.table<-merge(general.table,MLB.df.table,by='TAG', all.x=T) # 4) Merge
MLB.df.final.table$Partial_Score<-MLB.df.final.table$Partial_Score/general.table$OCC# 5) Divide one column by other
# D - The same tasks to be performed just like MLB
D.df<-filter(df, grepl('D', ST))
D.df.table<-as.data.frame(table(D.df$TAG))
names(D.df.table)<-c("TAG", "Partial_Score")
D.df.final.table<-merge(general.table,D.df.table,by='TAG', all.x=T)
D.df.final.table$Partial_Score<-D.df.final.table$Partial_Score/general.table$OCC
文字列のみを変更することにより、これらの5つのタスクをperformeする方法があるかどうか、私も疑問に思います。例えば、MLB
とD
について実行されたタスク1)〜5)の唯一の違いは、文字列 "MLB"と "D"だけでした。私はこのMLB、Dと他の11の文字列でベクトルを作成しようとし、assign
とpaste
の関数を使って成功しませんでした。
だから、要するに、私が希望する使用してソリューションを持つことです。
A)機能/ループ。
B)lapply;
C)できる場合は、文字列を変更するだけでMLB
とD
の作業を実行します。
もちろん、1つの解決策で十分です。他は教訓的にRをよりよく理解することに過ぎない。
ありがとうございます。あなたに必要な情報があれば教えてください。