r - 应用返回奇怪的结果
问题描述
我有像这样的数据框
df <- data.frame(ruleA = c('N', 'N', -1), ruleB = c(0, 0, -1))
其中元素'N'通过规则A,元素0通过规则B,我想逐行应用一个函数来查看每个观察(行)是否通过了所有规则。
一开始我试过
apply(df, 1, function(x) all(x %in% c('N', 0)))
我期待(TRUE, TRUE, FALSE)
,但它实际上返回(FALSE, FALSE, FALSE)
。
问题是当我尝试
apply(df[1:2, ], 1, function(x) all(x %in% c('N', 0)))
它返回(TRUE, TRUE)
。为什么会发生这种情况?
然后我尝试了更多
apply(df, 1, function(x) x %in% c('N', 0))
并期待
(TRUE, TRUE, FALSE)
(TRUE, TRUE, FALSE)
但它返回
(TRUE, TRUE, FALSE)
(FALSE, FALSE, FALSE)
再次,当我df[1:2, ]
只申请时,它会返回正确的结果。元素 0 出了什么问题?请任何人帮助。
似乎将 -1 替换为 1-9 避免了空格,那么应用过程中涉及的数字如何?
解决方案
项目编号 2c('N', 0)
不是数字。强制为“0”。“0”与 不同0
。虽然0 == "0" returns
TRUE ,
same(0, "0") 返回FALSE
. 该apply
函数将始终强制转换为普通类。
有一个问题,我不清楚起源。看看这个:
apply(df,1,str)
Named chr [1:2] "N" " 0"
- attr(*, "names")= chr [1:2] "ruleA" "ruleB"
Named chr [1:2] "N" " 0"
- attr(*, "names")= chr [1:2] "ruleA" "ruleB"
Named chr [1:2] "-1" "-1"
- attr(*, "names")= chr [1:2] "ruleA" "ruleB"
由于某种原因,0
对字符的强制增加了一个额外的空间。
推荐阅读
- python - MyPy 中的类型断言
- php - 只有根路径在新的 Laravel-8 安装中有效,所有其他都给 404
- javascript - reactjs中如何在两个子组件之间传输数据?
- python - 在数据框中使用 groupby 来执行数据过滤和元素减法
- amazon-dynamodb - DynamoDB:查询某种类型的所有相似项目
- json - 如何在 marklogic 中使用 JSON doc 的路径范围索引?
- c++ - 调用运算符参数评估顺序
- azure-devops - “消息”:“意外参数''”,Microsoft.Azure.Pipelines.WebApi.PipelineValidationException,Microsoft.Azure.Pipelines.WebApi
- visual-studio - 如何将 OpenSceneGraph 库和包含正确链接到 Visual Studio?
- xamarin.forms - 如何在 Xamarin.Forms 中切换相机?