r - 如何从变量中获取第一个和最后一个非Inf、非NaN、非NA、非0值?
问题描述
这是我的玩具数据集:
df <- tibble::tribble(
~data, ~first_non_0, ~last_non_0,
0, 100, 430,
NA_real_, 100, 430,
NaN, 100, 430,
Inf, 100, 430,
100, 100, 430,
120, 100, 430,
430, 100, 430,
NaN, 100, 430,
Inf, 100, 430,
0, 100, 430,
NA_real_, 100, 430)
我想得到
- 第一个非零、非 NA、非 NaN、非 Inf 值,如第 2 列所示
- 最后一个非零、非 NA、非 NaN、非 Inf 值,如第 3 列所示
受此答案的启发,我尝试了类似的方法,但不确定如何处理 NaN 和 Inf:
df %>%
mutate(first = na_if(data, 0) %>%
na_if(data, NaN) %>%
na_if(data, Inf) %>%
na.omit() %>%
dplyr::first(),
last = na_if(data, 0) %>%
na_if(data, NaN) %>%
na_if(data, Inf) %>%
na.omit() %>%
dplyr::last())
解决方案
如果你所有的价值观都是积极的,你可以使用df$data > 0
作为一个条件,然后你只需要处理Infinite
,即
i1 <- which(df$data > 0 & !is.infinite(df$data))
df$data[i1[1]]
#[1] 100
df$data[i1[length(i1)]]
#[1] 430
如果您也有负值,您可以将条件从大于切换为不等于(@markus 的赞美)
i1 <- which(df$data != 0 & !is.infinite(df$data))
推荐阅读
- python - + 不支持的操作数类型:子进程中的“Popen”和“str”。Popen
- xml - Getting all child nodes of a node list with XML::LibXML
- struts2 - Struts2的Action类中的ActionMapping
- javascript - Jquery 添加事件监听器。对象不支持此属性或方法
- ubuntu - docker 运行时主机重启
- c++ - 推力::device_vector 没有正确更新
- unix - /etc/passwd 与 /usr/bin/passwd
- java - 使用 Facebook Marketing API 按名称获取自定义受众
- ansible - Ansible parsing string to boolean fails (variable assignment)
- android - 如何使用 post 方法使用改造来获得数组响应