[英]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.