【发布时间】:2020-01-14 23:03:23
【问题描述】:
我想对一列应用几个函数,但我想在执行此操作时应用一些逻辑,在这种情况下,当另一列有一些 NA 时。为了说明,我将向iris 数据集添加一些 NA 并将其转换为 data.table:
library(data.table)
irisdt <- iris
## Prep some example data
irisdt[irisdt$Sepal.Length < 5,]$Sepal.Length <- NA
irisdt[irisdt$Sepal.Width < 3,]$Sepal.Width <- NA
## Turn this into a data.table
irisdt <- as.data.table(iris)
如果我想将max 应用于多个列,我会这样:
## Apply a function to individual columns
irisdt[, lapply(.SD, max), .SDcols = c("Petal.Length", "Petal.Width")]
#> Petal.Length Petal.Width
#> 1: 6.9 2.5
但是,在这种情况下,我想取出Sepal.Length 中不是 NA 的任何行,然后返回 max 和 min 以及我为 NA 子集的列的名称。下面是一种丑陋的实现方式,但希望能说明我所追求的:
## Here is what the table would look like
desired_table <- rbind(
irisdt[!is.na(Sepal.Length), .(max = max(Petal.Length), min = min(Petal.Length), var = "Sepal.Length")],
irisdt[!is.na(Sepal.Width), .(max = max(Petal.Length), min = min(Petal.Length), var = "Sepal.Width")]
)
desired_table
#> max min var
#> 1: 6.9 1.2 Sepal.Length
#> 2: 6.7 1.0 Sepal.Width
由reprex package (v0.3.0) 于 2020-01-14 创建
我有什么想法可以做到这一点吗?
【问题讨论】:
标签: r data.table