R 使用位置和名称的数据表子集
我试图用数值来子集一个数据表,这样我就可以只对数值变量执行五位数的汇总。但是,我还需要对变量进行分组。我尝试这样做的方式不允许我使用子集和不属于子集的id变量。我知道数据表有R 使用位置和名称的数据表子集,r,data.table,subset,R,Data.table,Subset,我试图用数值来子集一个数据表,这样我就可以只对数值变量执行五位数的汇总。但是,我还需要对变量进行分组。我尝试这样做的方式不允许我使用子集和不属于子集的id变量。我知道数据表有.SD命令,但我似乎无法在数据表中获得应用函数和组的正确组合。id变量不是数字,不能强制为数字;它在我的数据表中也不是唯一的 以下是我尝试过的: library(data.table) library(magrittr) dt <- data.table(num1 = rep(1, 10), num2
.SD
命令,但我似乎无法在数据表中获得应用函数和组的正确组合。id
变量不是数字,不能强制为数字;它在我的数据表中也不是唯一的
以下是我尝试过的:
library(data.table)
library(magrittr)
dt <- data.table(num1 = rep(1, 10),
num2 = rep(2, 10),
num3 = rep(100, 10),
id = c("1a", "2b", "2h", "3b", "4b", "5b", "5b", "7n", "8mn", "9y"),
char1 = rep("a", 10),
char2 = rep("b", 10))
numeric_variables <-
lapply(dt, is.numeric) %>%
unlist() %>%
as.vector()
dt[, numeric_variables, with = FALSE]
dt_summary <-
apply(dt[, numeric_variables, with = FALSE][, grep("num",
names(dt[, numeric_variables, with = FALSE]),
value = TRUE),
with = FALSE],
2,
fivenum) %>%
as.data.frame()
rownames(dt_summary) <-
c("Min", "Q1", "Med", "Q3", "Max")
dt_summary
dt[, .(numeric_variables, id), with = FALSE]
库(data.table)
图书馆(magrittr)
dt%
as.vector()
dt[,数字变量,带=假]
dt_汇总%
as.data.frame()
rownames(dt_summary)我想您正在寻找.SDcols
ind <- sapply(dt, is.numeric)
(dt_summary <- dt[,lapply(.SD, fivenum), .SDcols = ind])
Asdata.table
不接受行名,您可以执行以下操作:
setDF(dt_summary)
rownames(dt_summary) <-
c("Min", "Q1", "Med", "Q3", "Max")
> dt_summary
num1 num2 num3
Min 1 2 100
Q1 1 2 100
Med 1 2 100
Q3 1 2 100
Max 1 2 100
setDF(dt_摘要)
行名称(dt_摘要)dt_摘要
num1 num2 num3
最低12 100
第一季11200
医学1 2 100
第三季11200
最多1200
由于缺少加载所需的库,您的代码不可复制,乍一看,我发现至少使用了两个不同的包,在可复制的示例中有这样的包很好。@jangorecki-谢谢;已编辑。data.table
不支持行名称,@dc3在data.table中使用by
确实没有很好的理由。如果需要分组,请使用data.table
的by
参数。@Rolanddt[,lapply(.SD,FUN=summary),.SDcols=ind,by=id]
setDF(dt_summary)
rownames(dt_summary) <-
c("Min", "Q1", "Med", "Q3", "Max")
> dt_summary
num1 num2 num3
Min 1 2 100
Q1 1 2 100
Med 1 2 100
Q3 1 2 100
Max 1 2 100