**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我有一个包含df$a
列的大型 Dataframe ,其中包含3个可能的值:(0,1,NA...)
和class(df$a) - numeric
我定义了一个新变量,用于标识至少有一行包含df$a >0
的组。
df[,b:=+(any(a,na.rm=TRUE)>0),by=group]
我期望df$b
为0或1,但R返回TRUE和FALSE,并警告“强制类型“double”的参数为逻辑”。
我试着用ifelse
、max(a,na.rm=TRUE)>0
、any(a,na.rm=TRUE)==1
等写同样的代码,但所有的代码都返回TRUE和FALSE,而不是1和0。
为什么会发生这种情况?
1条答案
按热度按时间nue99wik1#
正确的语法是
如果你执行
any(c(1,3,5))
,你会得到同样的错误。any
需要逻辑值,而不是数字(Double)值,所以它会将1,3和5强制为逻辑值并抛出警告。相反,如果你执行any(c(1,3,5) > 4)
,你现在有一个比较any()
,>
将返回TRUE或FALSE,所以不会返回警告。为了将TRUE/FALSE转换为1/0,可以使用一元运算符
+
。测试用