2016-05-05 12 views
1

にダミーの値を追加するかどうかを確認します。R - ベクトルからの要素がdata.frameに存在し、そうでない場合、キャンペーンのベクトルを持つ

campaignsTypes <- c("Social Media","Distribution","Nurture","Newsletter","Push") 

し、それらに関する情報をdata.frame:

out <- structure(list(Type = c("Distribution", "Newsletter", "Nurture", 
"Social Media"), Pageviews = c(42, 880, 17, 84)), .Names = c("Type", 
"Pageviews"), row.names = c(NA, -4L), class = "data.frame") 

ベクトルcampaignsTypesのすべての要素がdata.frame outに含まれているかどうかをチェックし、そうでない場合は、この欠落しているキャンペーンのダミー値を含む新しい行を作成します。これまでは、campaigngTypeが存在しないかどうかを確認できます。それを行うには

> ifelse(campaignsTypes %in% out$Type == FALSE,rbind(out, c(????,0)),"") 
How to put the value of the missing campaign here?----------⤴ 
+0

あなたの予想される出力は何ですか?あなたは 'campaignTypes $ ind < - if(すべて(campaignTypes%in%out $ Type))1 else 0' – akrun

+0

@akrunが必要ですか?期待される出力は 'output < - structure(listページビュー= c(42,880,17,84,0))、.Names = c( "タイプ"、 "ニュースレター"、 " pageviews ")、row.names = c(NA、-5L)、class =" data.frame ")'であり、出力$ Typeはベクトル 'campaignsType'のすべての要素を含む必要があります。このタイプの結果が含まれている場合、キャンペーンタイプ%in%out $ Type == FALSEがtrueの場合、この観測の出力Pageviewsに0 – agustin

+0

が割り当てられます。最初のifelseステートメントを削除する質問を編集しました。 、それは混乱を作成する:) – agustin

答えて

2

次のことができます。しかし、私は手動で挿入された新しい行の最初の列の値としてベクターから存在しない要素を割り当てることに問題を抱えています欠落行を含む新しいデータフレームを作成し、 2つのデータフレームをスタックします。

rbind(out, data.frame(Type=setdiff(campaignsTypes, out$Type), 
         Pageviews=0L)) 

結果:

  Type Pageviews 
1 Distribution  42 
2 Newsletter  880 
3  Nurture  17 
4 Social Media  84 
5   Push   0 
+0

それは完璧に動作します! – agustin

2

一つの方法、

output <- rbind(out, campaignsTypes[sapply(campaignsTypes, function(i) !(i %in% out$Type))]) 
output$Pageviews[output$Pageviews == output$Type] <- 0 
output 
#   Type Pageviews 
#1 Distribution  42 
#2 Newsletter  880 
#3  Nurture  17 
#4 Social Media  84 
#5   Push   0 
+1

このソリューションは完璧に動作します。しかし、Ernest Aのソリューションを答えとして選んだのは、そのプロセスがたった一歩で完了したからです。 – agustin

+0

それは問題ありません。とにかく良い答えです。私は 'setdiff'を完全に忘れていたので、私はループを使用しました... – Sotos

関連する問題