[英]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
仅包含一和二,将三分之一的一半替换为一,而其余的一半则是完全随机的二。 有什么好的建议吗? 提前致谢。
我想说,最简单的方法是使用sample和ifelse ,您也应该根据男性/女性的分布情况进行抽样。
# 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)
注意:与马库斯答案一样,最好设置一个种子以确保可重复性。
您可以使用replace
和sample
。
给定一个包含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.