不确定我是否正确标题,因为我不完全理解以下行为的原因:
dfSet <- data.frame(ID = sample(1:15, size = 15, replace = FALSE), va1 = NA, va3 = 0, stringsAsFactors = FALSE)
dfSet[1:10, ]$va1 <- 'o1'
dfSet[11:15, ]$va1 <- 'o2'
dfSet[dfSet$ID %in% sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE), ]$va3 <- 1
print(length(unique(dfSet$ID)))
Run Code Online (Sandbox Code Playgroud)
我希望最终的印刷品显示15,但事实并非如此.而是出现13或14并且dfSet被修改,至少有两行具有相同的ID.看来这部分代码:
dfSet[dfSet$ID %in% sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE), ]$va3 <- 1
Run Code Online (Sandbox Code Playgroud)
修改$ ID列 - 我不知道为什么?
解决方法:
temp <- sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE)
dfSet[dfSet$ID %in% temp, ]$va3 <- 1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,一切都按预期工作 - …