小编han*_*101的帖子

在多个列的相同条件下过滤data.table

我使用列名称向量来选择data.table的列的子集.我有这个想法,是否可以基本上定义条件,i然后将条件应用于所有选定的列.例如,使用mtcars数据集.我想选择气缸和齿轮柱,然后想要过滤所有有四个气缸和四个齿轮的车.当然,我还需要确定它是否andor用于过滤器,但我只是有兴趣,如果能以某种方式在应用理念data.table方面.

# working code
sel.col <- c("cyl", "gear")
dt <- data.table(mtcars[1:4,])

dt[, ..sel.col]
dt[cyl == 4 & gear == 4, ..sel.col]    


# Non-working code
dt[ sel.col == 4 , ..sel.col]
Run Code Online (Sandbox Code Playgroud)

r data.table

9
推荐指数
1
解决办法
2451
查看次数

直接用正确的数据类型定义空data.table

为了使我的函数更加安全,我需要创建一个空的data.table,它具有特定数量的列和预定义的 data.type。这是为了允许稍后调用,dplyr::union即使 data.table 为空。

因此,我想创建一个空的data.table并直接定义列的数据类型。这适用于数字或字符列,但不适用于日期列。

我通过使用 data.table FAQ 中的条目 2.4 找到了一个可能的解决方案,但首先用错误的值填充 data.table 然后再删除它们似乎有点奇怪。常见问题2.4

复制问题的代码:

library(data.table)
library(dplyr)


dt.empty <- data.table("Date" = character()
           , "Char.Vector" = character()
           , "Key.Variable" = character()
           , "ExchangeRate" = numeric()
)


dt.Union <- data.table( "Date" = as.Date(c("2000-01-01", "2001-01-01"))
                        , "Char.Vector" = as.character(c("a", "b"))
                        , "Key.Variable" = as.character(c("x1", "x2"))
                        , "ExchangeRate" = as.numeric(c(2,1.4))



)

dplyr::union(dt.Union
      , dt.empty)
Error: not compatible: 
- Incompatible type for column `Date`: x Date, y character
- Incompatible type …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

3
推荐指数
1
解决办法
1262
查看次数

更改data.table子集的随机选择的值

基本上是这个问题的扩展,因为我注意到,如果你第二次进行子集化,就不可能改变列的值.

random.length  <-  sample(x = 15:30, size = 1)
dt <- data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE)) 
set.seed(1)
dt[sample(.N,3), score :=9999]
set.seed(1)
dt[sample(.N,3),]
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,并将三个随机选择的城市的分数更改为9999.虽然如果您在第一步中进行分组,然后进行采样并尝试分配新的分数值,那么这是不可能的.

set.seed(1)
dt[city == "New York",][sample(.N,1), score := 55555]
set.seed(1)
dt[city == "New York",][sample(.N,1)]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是,我可以更改某个列的值,该列是某个子集的一部分,并从该子集中随机选择.

r data.table

2
推荐指数
2
解决办法
111
查看次数

保存`mutate()`的结果而不重新分配

目前正致力于了解dplyr和整体tidyverse更好,现在我偶然发现了多种方式存储mutate呼叫结果.我想知道添加额外列的可能方法之一是更好还是更差.

library(data.table)
library(dplyr)
dt <- structure(list(obs = c("1953M04", "1953M05", "1953M06", "1953M07", "1953M08", "1953M09", "1953M10", "1953M11", "1953M12", "1954M01")
               , gs1 = c(2.35999989509583, 2.48000001907349, 2.45000004768372, 2.38000011444092, 2.27999997138977, 2.20000004768372, 1.78999996185303, 
           1.66999995708466, 1.6599999666214, 1.4099999666214)), row.names = c(NA, -10L), class = c("data.table", "data.frame"))

# Data.Table approach
dt[, Date.Month := as.Date(paste0(obs,"-01"), format = "%YM%m-%d")]

# dplyr-way in a logic way at the end of the pipe
dt %>% mutate( Date.Month = as.Date(paste0(obs,"-01"), format = "%YM%m-%d")) %>% {. ->> dt } …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

2
推荐指数
1
解决办法
52
查看次数

标签 统计

data.table ×4

r ×4

dplyr ×2