簡體   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