Sec*_*n_4 1 iterator replace for-loop if-statement r
我有一个类似于下面所示的数据集.
Cat_1 Cat_2
SEO Branded
SEO Branded
SEO Branded
SEO Branded
SEO Branded
SEO Branded
SEO Branded
SEO Branded
SEO Non branded
SEO Non branded
SEO Non branded
SEO Non branded
SEO Unknown
SEO Unknown
SEO Unknown
Run Code Online (Sandbox Code Playgroud)
我试图用"品牌"或"非品牌"替换Cat_2因子="未知".用"品牌"或"非品牌"代替的"未知"因子的数量等于"品牌"和"非品牌"因子的分布."品牌"和"非品牌"因素的实际分布不是一个简单的66.67/33.33分割,并将根据正在处理的数据框架而改变.
我使用以下代码来获得百分比分割:
a<-(sum(dataframe$Cat_2=="Branded"))
b<-(sum(dataframe$Cat_2=="Non Branded"))
c<-a+b
percenta<-a/c
percentb<-b/c
d<-(sum(dataframe$Cat_2=="Unknown"))
Run Code Online (Sandbox Code Playgroud)
为了方便起见,我创建了一个单独的数据框dataframe.2,它只包含Cat_2 ="Unknown"因子,如下所示:
Cat_1 Cat_2
SEO Unknown
SEO Unknown
SEO Unknown
Run Code Online (Sandbox Code Playgroud)
我试图使用for循环来迭代dataframe.2的内容,并将"Unknown"的每个实例替换为"Branded",直至"Branded"= factora*d的因子数量(其中percenta和d按照上面的等式).我使用的代码是:
for (row in dataframe.2){
if (sum(dataframe.2$Cat_2=="Unknown")<percenta*d){
revalue(dataframe.2$Cat_2, c("Unknown"="Branded"))
} else{(revalue(dataframe.2$Cat_2, c("Unknown"="Non Branded")))
}}
Run Code Online (Sandbox Code Playgroud)
但是它不会改变数据帧中的Cat_2因子
我们可以更快地做到这一点,根本不使用任何for循环,也只运行初始数据(df此处称为配音).
首先,找出我们需要多少"品牌":
brandedunknowns <- round(sum(df$Cat_2 == "Unknown") *
(sum(df$Cat_2 == "Branded") / sum(df$Cat_2 != "Unknown")))
Run Code Online (Sandbox Code Playgroud)
这只是找到已知的品牌的总比例,乘以未知数,然后舍入到最接近的数.
然后,我们将第一个brandedunknowns未知数设为品牌:
df$Cat_2[df$Cat_2 == "Unknown"][1 : brandedunknowns] <- "Branded"
Run Code Online (Sandbox Code Playgroud)
然后将其余部分变为"非品牌":
df$Cat_2[df$Cat_2 == "Unknown"] <- "Non Branded"
Run Code Online (Sandbox Code Playgroud)