繁体   English   中英

如何根据条件和随机抽样替换列的值?

[英]How to replace values of a column based on a condition and random sampling?

我正在处理“ Gender列,该列的要素值为“男性”,“女性”和“总计”。 不需要“总计”,因此我决定将“总计”值的一半替换为男性,其余部分分配给女性。 该列很简单,我已经通过基本的as.numeric(factor())行将所有因子转换为数字:

Gender     NewGender
Male       1
Female     2
Total      3
Total      3
.
.
Female     2

现在,下一步是将1和2替换为所有3,但顺序随机

共有55399个观测值,其中22,057个对应于NewGender列中的3。 我尝试了一些独特的命令集,我认为它们是最接近的:

# Experiment with 50 rows

for (row in data$NewGender[sample(which(data$NewGender, 50), ]) {
        if (row == 3) {row <- 1; row <- row + 1}
}

尽管这会生成警告,但似乎并不能代替三者。 我很好用这个:

data$NewGender[data$NewGender == 3] <- 1

但是我无法将其与sample()方法嵌套在一起。 我想要的是Newgender仅包含一和二,将三分之一的一半替换为一,而其余的一半则是完全随机的二。 有什么好的建议吗? 提前致谢。

我想说,最简单的方法是使用sampleifelse ,您也应该根据男性/女性的分布情况进行抽样。

# Some data
gender <- sample(c("male", "female", "other"), 100, prob = c(0.4, 0.3, 0.3), replace = TRUE)

# Calculating proportion of females vs males
male_prop <- sum(gender=="male")/(sum(gender=="male")+sum(gender=="female"))
female_prop <- sum(gender=="female")/(sum(gender=="male")+sum(gender=="female"))

# Replacing other at random
gender <- ifelse(gender=="other", sample(c("male", "female"), 1, prob = c(male_prop, female_prop), replace = TRUE), gender)

注意:与马库斯答案一样,最好设置一个种子以确保可重复性。

您可以使用replacesample

给定一个包含1到3的数字的向量

set.seed(1)
NewGender <- sample(1:3, 20, TRUE)
table(NewGender)
#NewGender
#1 2 3 
#5 7 8 

我们创建了一个合乎逻辑的载体,其是TRUE其中NewGender等于3。

idx <- NewGender == 3

现在我们用1和2的样本替换3

out <- replace(NewGender, idx, sample(1:2, sum(idx), TRUE))

检查分布

table(out)
#out
# 1  2 
#11  9 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM