如何用dplyr基于现有列条件为DataFrame派生新列
用dplyr派生条件新列的解决方案
这事儿用dplyr的mutate()函数就能轻松搞定,正好匹配你的需求。下面给你两种可行的方法,都能得到你想要的结果:
第一步:构造原始数据(已有数据可跳过)
先把你提供的原始DataFrame用R代码还原出来:
library(dplyr) # 创建原始数据集 df <- tibble( datetime = c("12/1/2017", "12/2/2017", "12/3/2017", "12/4/2017", "12/5/2017", "12/6/2017", "12/7/2017"), outcome = c(1, 1, 1, 2, 1, 1, 1) )
第二步:派生新列result
这里有两种写法,选你觉得顺手的就行:
方法1:用if_else()明确指定条件(可读性更强)
这种方式逻辑直白,适合刚接触dplyr的朋友:
df_result <- df %>% mutate(result = if_else(outcome > 1, 1, 0))
方法2:利用逻辑值转整数(更简洁)
在R里,布尔值TRUE等价于1,FALSE等价于0,所以可以直接把条件判断结果转成整数:
df_result <- df %>% mutate(result = as.integer(outcome > 1))
最终结果
运行任意一段代码后,你都会得到期望的DataFrame:
# A tibble: 7 × 3 datetime outcome result <chr> <dbl> <int> 1 12/1/2017 1 0 2 12/2/2017 1 0 3 12/3/2017 1 0 4 12/4/2017 2 1 5 12/5/2017 1 0 6 12/6/2017 1 0 7 12/7/2017 1 0
简单说下:mutate()是dplyr中添加/修改列的核心函数,两种方法本质都是基于outcome > 1的条件赋值,只是写法不同,效果完全一致。
内容的提问来源于stack exchange,提问作者221B
相关产品推荐
相关产品推荐

