Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用位置和名称的数据表子集_R_Data.table_Subset - Fatal编程技术网

R 使用位置和名称的数据表子集

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

我试图用数值来子集一个数据表,这样我就可以只对数值变量执行五位数的汇总。但是,我还需要对变量进行分组。我尝试这样做的方式不允许我使用子集和不属于子集的id变量。我知道数据表有
.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])
As
data.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
参数。@Roland
dt[,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