【发布时间】:2019-03-16 14:16:16
【问题描述】:
我想根据df$var1 中每个df$month 的最大值编写一个名为df$dummy 的新变量,其中最大值为1,其他所有值均为0 .查看可重现的数据集:
df<- data.frame(date= seq.Date(from = as.Date('2017-01-01'), by= 7,
length.out = 20), var1= rnorm(20, 5, 3))
df$month<- as.numeric(strftime(df$date, "%m"))
我无法概念化函数的条件。在 Excel 中,我将只使用 maxif 函数并指定我的标准。我在下面的尝试不起作用:
df$dummy<- apply(df$var1, MARGIN = 2,
function(x) if_else(max(x) %in% df$month, 1, 0))
它返回这个错误:
Error in apply(df$var1, MARGIN = 2, function(x) if_else(max(x) %in% df$month, :
dim(X) must have a positive length
如何编码这个虚拟变量?是否有使用mutate_if 的可行dplyr 解决方案?
【问题讨论】:
-
ifelse(condition, 1, 0)等价但比as.integer(max(x) %in% df$month)慢得多。这是因为FALSE/TRUE被编码为0/1。 (当然是condition。) -
另外,
if_else不是基本 R 函数,它是一个包dplyr。当您使用非基本函数时,通过调用library()来启动脚本以加载您需要的包。 -
错误来自您将函数应用于
df$var1的第二维但df$var1是一个向量。您不需要apply。我敢打赌max(x) %in% df$month始终是FALSE,连续变量的最大值不是概率为1的整数。