2017-05-11 17 views
0

DFの行をループさせようとしています。私はいくつかの行にいくつかの変更を行い、新しい行を含む新しいデータフレームを作成する行をループしながら。私はうまく行印刷の下機能を使用して、変更された場合データフレームの行をループし、新しい行からデータフレームを作成します。

df <- structure(
    list(
    campaign_name = c(
     "Category> fanshop", 
     "Category> trainingspakken", 
     "Category> trainingsshirts", 
     "Category> hoodies", 
     "Category> broeken", 
     "Category> voetbalshirts" 
    ), 
    ad_group = c(
     "Pro team X[B]", 
     "Pro team X[B]", 
     "Pro team X[B]", 
     "Pro team X[B]", 
     "Pro team X[B]", 
     "Pro team X[B]" 
    ), 
    category = c(
     "fanshop", 
     "trainingspakken", 
     "trainingsshirts", 
     "hoodies", 
     "broeken", 
     "voetbalshirts" 
    ), 
    Final_URL = c(
     "https://fanshop/Pro-team-X.html", 
     "https://fanshop/Pro-team-X/_Trainingspakken", 
     "https://fanshop/Pro-team-X/_Trainingsshirts", 
     "https://fanshop/Pro-team-X/_Hoodies_Sweaters", 
     "https://fanshop/Pro-team-X/_Korte-broeken_Lange-broeken", 
     "https://fanshop/Pro-team-X/_Voetbalshirts" 
    ), 
    team_name = c(
     "Pro team X", 
     "Pro team X", 
     "Pro team X", 
     "Pro team X", 
     "Pro team X", 
     "Pro team X" 
    ), 
    keyword = c(
     "+Pro +team +X +fanshop", 
     "+Pro +team +X +trainingspakken", 
     "+Pro +team +X +trainingsshirts", 
     "+Pro +team +X +hoodies", 
     "+Pro +team +X +broeken", 
     "+Pro +team +X +voetbalshirts" 
    ), 
    Criterion_type = c("Broad", "Broad", "Broad", "Broad", "Broad", "Broad") 
), 
    .Names = c(
    "campaign_name", 
    "ad_group", 
    "category", 
    "Final_URL", 
    "team_name", 
    "keyword", 
    "Criterion_type" 
), 
    row.names = c("1", "2", "3", "4", "5", "6"), 
    class = "data.frame" 
) 

私が使用するデータフレームはこれを使用して作成することができますように見えます。しかし、データフレームに割り当てるとすぐに、ループが実行されるたびに上書きされます。

for (row in 1:nrow(df)) { 
    temp_row <- df[row,] 
    if (temp_row$Criterion_type == "Broad") { 
    temp_row$keyword <- gsub("\\+", "", temp_row$keyword) 
    temp_row$Criterion_type <- "Negative Exact" 
    } 
    print(temp_row) 
} 

ここに多くの質問を検討していた後、私はまだそれが適切に行わ取得するために管理していなかったアプローチの多くを試してみてください。とても有難い!

上記のIF文に従って各行が変更されることを期待しています。 1行目は次のようになります。私はすでに試した質問の

campaign_name ad_group category Final_URL team_name keyword Criterion_type 
Category> voetbalshirts Pro team X[B] voetbalshirts https://fanshop/Pro-team-X/_Voetbalshirts Pro team X paris saint germain voetbalshirts Negative Exact 

一部:これはあなたに与え

library(dplyr) 
new_df <- data.frame() 
for (row in 1:nrow(df)) { 
    temp_row <- df[row,] 
    if (temp_row$Criterion_type == "Broad") { 
    new_df <- bind_rows(new_df, data.frame(keyword=gsub("\\+", "", temp_row$keyword), Criterion_type = "Negative Exact")) 
    } 
} 

How to append rows to an R data frame

duplicate rows and create new data frame in R

+0

@coffeinjunkyありがとう、申し訳ありません。通常私は常に受け入れます。どういうわけか私は今忘れてしまった。 –

答えて

1

はこれを試してみてください新しいデータフレーム:

new_df 

           keyword Criterion_type 
1   paris saint germain fanshop Negative Exact 
2 paris saint germain trainingspakken Negative Exact 
3 paris saint germain trainingsshirts Negative Exact 
4   paris saint germain hoodies Negative Exact 
5   paris saint germain broeken Negative Exact 
6 paris saint germain voetbalshirts Negative Exact 

ただし、これを実現するには、ベクター化しているため、これははるかに簡単で高速になる可能性があります。例えば、

df$keyword <- with(df, 
        ifelse(Criterion_type=="Broad", gsub("\\+", "", keyword), keyword)) 
df$Criterion_type <- with(df, 
        ifelse(Criterion_type=="Broad", "Negative Exact", Criterion_type)) 

は同じであり、はるかに読みやすくなります。

+0

ありがとう!愚かな私。 forループでDFを作成していましたが、前にこれを行う必要がありました。それを完全に忘れてしまった。 –

関連する問題