r - 如果有任何值或列满足条件,则对值进行分类并保留 NA 值
问题描述
我试图找出我的任何列的值是否超过某个值,例如 7。如果是,则将其分类为more
,否则为less
。我的问题与此处的问题类似,但我不知道如何将其更新到我的情况。我需要按行对值进行分类。此外,某些行可以仅由 NA/NaN 值填充。我需要将它们保存在数据框中,因此我无法在计算之前过滤它们。
例子:
# Example: classify data if they fit the condition:
data <- data.frame(V1=c(1,5,7, NA),
V2=c(1,5,8, NA),
V3=c(3,9,10, NaN))
# Classify each column:
ifelse(data$V1 >=7, "more", "less")
# Classify based on all columns? NOT WORKING!
data$NewCol <- +( Reduce(`|`, lapply(data, >=, 7)))
期望的结果:
V1 V2 V3 newCol
1 1 1 3 less # no value is >= 7
2 5 5 9 more
3 7 8 10 more
4 NA NA NaN NA
解决方案
你可以使用rowSums
-
data$newCol <- ifelse(rowSums(data >= 7) > 0, 'more', 'less')
或者如果我们有多个条件要检查,则使用dplyr
with 。case_when
library(dplyr)
data %>%
rowwise() %>%
mutate(newCol = case_when(all(is.na(c_across())) ~ NA_character_,
any(c_across() >= 7) ~ 'more',
TRUE ~ 'less'))
# V1 V2 V3 newCol
# <dbl> <dbl> <dbl> <chr>
#1 1 1 3 less
#2 5 5 9 more
#3 7 8 10 more
#4 NA NA NaN NA
推荐阅读
- javascript - 检测文档上的第一次用户交互
- scheme - Racket中list和list*的区别
- javascript - REACTJS 中状态变化的错误/问题
- r - 大字段的文本到列
- python - 将模型函数拟合到定义的数据范围
- angular - 即使在使用 clearInterval 之后,如果条件满足,我也无法停止 setInterval()
- python-3.x - 为什么在发出请求时我的网址中出现“%0A”
- javascript - 如何在 LINQPad 中的代码中单击按钮(而不是通过鼠标)?
- c++ - 带有空捕获列表的 lambda 如何工作?
- save - 如何保存完整的 Vowpal Wabbit python 模型(pyvw)?