gpt4 book ai didi

r - 根据单个 if 条件改变多列

转载 作者:行者123 更新时间:2023-12-01 22:55:20 25 4
gpt4 key购买 nike

我有一个示例 df:

df <- data.frame(
var1 = c("A", "B"),
var2 = c("C", "D"),
var3 = c("E", "F"),
var4 = c("G", "H"),
var5 = c("I", "J"),
var6 = c("K", "L"),
var7 = c("M", "N"),
var8 = c(NA, "P"))

df2 是我想要的输出:


df2 <- data.frame(
var1 = c("I", "B"),
var2 = c("Z", "D"),
var3 = c("M", "F"),
var4 = c("G", "H"),
var5 = c("I", "J"),
var6 = c("K", "L"),
var7 = c("M", "N"),
var8 = c(NA, "P"),
inputed_flag = c("Y","N"))

基本上逻辑如下:


df3 <- df %>%
mutate(var1 = ifelse(is.na(var8), var5, var1),
var2 = ifelse(is.na(var8), "Z", var2),
var3 = ifelse(is.na(var8), var7, var3),
imputed_flag = ifelse(is.na(var8), "Y", "N"))

但是在 R 中,是否有一种更简单/更紧凑的方法来基于单个 if 条件来改变列?本例中的条件是如果 var8 缺失,则为其他变量估算某些值。我不知道在没有一堆具有相同条件的 ifelse 语句的情况下执行此操作的另一种方法。

在 sas 中我们可以做这样的事情


if missing(var8) then do;
var1 = var5;
var2 = "Z";
var3 = var7;
imputed_flag = "Y";
end;
if not missing(var8) then imputed_flag = "N";

如果满足单个 if 条件,则可以在一个 if 语句中更改多个变量。

如果可能的话,我正在寻找像 sas 这样优雅的 R 解决方案。

最佳答案

我认为基本 R 中的简单子(monad)集分配在这里是合理的:

i <- is.na(df$var8)
df[i, 1:3] <- data.frame(var1 = df$var5[i], var2 = "z", var3 = df$var7[i])
cbind(df, imputed_flag = i)
#> var1 var2 var3 var4 var5 var6 var7 var8 imputed_flag
#> 1 I z M G I K M <NA> TRUE
#> 2 B D F H J L N P FALSE

reprex package于2022年8月17日创建(v2.0.1)

关于r - 根据单个 if 条件改变多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73394177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com