【发布时间】:2021-08-24 22:49:44
【问题描述】:
我一直在使用 if/else if 语句的组合,但似乎无法获得预期的结果。我希望代码查看数据框top 和bottom 中的两列。如果其中一个数据缺失,则新列应等于不是0 的值。如果top 和bottom 值都存在,则应使用平均值填充该列。此外,如果两个值都是0,则新值也将是0。
df$new <- if (df$top > 0
&& df$bottom == 0){
(df[["top"]])
} else if (df$top == 0
&& df$bottom > 0){
(df[["bottom"]])
} else if (df$top > 0
&& df$bottom > 0){
(df[["top"]] + df[["bottom"]])/2
}
目前,当我运行代码时,它正在创建一个新列 new,但只填充 (top + bottom)/2 值。
根据要求
df <- data.frame(top = c(0, 2, 1, 4), bottom = c(1, 4, 0, 6))
然后输出...
top bottom new
1 0 1 1
2 2 4 3
3 1 0 1
4 4 6 5
【问题讨论】:
-
你能发布想要的输出吗?
-
(1) 请分享您的数据示例,最好使用
dput(head(df))和给定数据的您想要的输出。点击“编辑”按钮并将structure输出放在那里。 (2) 在我看来,您正在寻找if的矢量化版本。改用ifelse,或者,由于您使用多个条件,请尝试dplyr的case_when函数。 -
以上更新。抱歉,我对 R 很陌生。
-
"如果其中一个数据缺失,新列应该等于不为 0 的值" 如果顶部和底部缺失的值为 0 怎么办?应该分配什么?当您提到缺失值时,是指 NA 还是 0?
-
我指的是
0,所有NA's都已转换为0。至于top和bottom都等于0时,0的返回值就足够了,因此(top+bottom)/2有效。
标签: r if-statement conditional-statements