為了根據考慮另一列的條件填充資料框的空列,我找到了以下解決方案,該解決方案作業正常,但不知何故有點難看。有人知道解決這個問題的更優雅的方法嗎?
base::set.seed(123)
test_df <- base::data.frame(vec1 = base::sample(base::seq(1, 100, 1), 50), vec2 = base::seq(1, 50, 1), vec3 = NA)
for (a in 1:base::nrow(test_df)){
spc_test_df <- test_df[a, ]
# select the specific row of the dataframe
if(spc_test_df$vec1 <= 25 | spc_test_df$vec1 >= 75){
# evaluate whether the deviation is below/above the threshold
spc_test_df$vec3 <- 1
# if so, write TRUE
} else {
spc_test_df$vec3 <- 0
# if not so, write FALSE
}
test_df[a, ] <- spc_test_df
# write the specific row back to the dataframe
}
uj5u.com熱心網友回復:
不需要 for 回圈,因為在這種情況下您可以使用矢量化解決方案。關于如何解決這個問題的三個選項:
# option 1
test_df$vec3 <- (test_df$vec1 <= 25 | test_df$vec1 >= 75)
# option 2
test_df$vec3 <- as.integer(test_df$vec1 <= 25 | test_df$vec1 >= 75)
# option 3
test_df$vec3 <- ifelse(test_df$vec1 <= 25 | test_df$vec1 >= 75, 1, 0)
在所有情況下都給出:
vec1 vec2 vec3
1 5 1 1
2 6 2 1
3 61 3 0
4 20 4 1
....
47 3 47 1
48 55 48 0
49 44 49 0
50 97 50 1
(僅呈現前四行和最后四行)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369911.html
上一篇:回圈嵌套字典
