- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 R
中创建一个新列data.table
这是基于 ifelse()
不同列的比较。但是,我想要 ifelse
要逐行应用的语句。我试过使用组 by
data.table
的功能,但它似乎适用于 test
ifelse
的状况按行但评估 yes
列中所有值的条件,而不是使用 by
条件以行方式进行。下面是一个例子和我尝试过的一些解决方案。
我有一个 R
data.table
像这样:
> set.seed(45)
> DT <- data.table(date = c(rep("2018-01-01", 3), rep("2018-01-02", 3), rep("2018-01-03", 3)),
+ id = rep(letters[1:3], 3),
+ v1 = sample(x = -20:20, size = 9),
+ v2 = sample(x = -20:20, size = 9))
> str(DT)
Classes ‘data.table’ and 'data.frame': 9 obs. of 4 variables:
$ date: chr "2018-01-01" "2018-01-01" "2018-01-01" "2018-01-02" ...
$ id : chr "a" "b" "c" "a" ...
$ v1 : int 5 -8 -11 -6 -7 -10 -13 -2 -14
$ v2 : int -20 -6 14 -9 -3 -5 19 12 -16
- attr(*, ".internal.selfref")=<externalptr>
> DT
date id v1 v2
1: 2018-01-01 a 5 -20
2: 2018-01-01 b -8 -6
3: 2018-01-01 c -11 14
4: 2018-01-02 a -6 -9
5: 2018-01-02 b -7 -3
6: 2018-01-02 c -10 -5
7: 2018-01-03 a -13 19
8: 2018-01-03 b -2 12
9: 2018-01-03 c -14 -16
> DT_out
date id v1 v2 c
1: 2018-01-01 a 5 -20 0
2: 2018-01-01 b -8 -6 0
3: 2018-01-01 c -11 14 11
4: 2018-01-02 a -6 -9 0
5: 2018-01-02 b -7 -3 0
6: 2018-01-02 c -10 -5 0
7: 2018-01-03 a -13 19 13
8: 2018-01-03 b -2 12 2
9: 2018-01-03 c -14 -16 0
min
跨越
v1
中的所有值和
v2
.这种行为是意料之中的;不过,它评估
test
对我来说很奇怪。即使没有
key
也可以按行进行条件处理设置或
by
说:
> DT[, c := ifelse(v1 < 0 & v2 > 0, min(-v1, v2), 0)]
> DT
date id v1 v2 c
1: 2018-01-01 a 5 -20 0
2: 2018-01-01 b -8 -6 0
3: 2018-01-01 c -11 14 -20
4: 2018-01-02 a -6 -9 0
5: 2018-01-02 b -7 -3 0
6: 2018-01-02 c -10 -5 0
7: 2018-01-03 a -13 19 -20
8: 2018-01-03 b -2 12 -20
9: 2018-01-03 c -14 -16 0
key
并使用
by
条件,没有任何变化,但我收到一条错误消息。
> setkey(DT, date, id)
> DT[, c := ifelse(v1 < 0 & v2 > 0, min(-v1, v2), 0), by = list(date, id)]
Error in `[.data.table`(DT, , `:=`(c, ifelse(v1 < 0 & v2 > 0, min(-v1, :
Type of RHS ('integer') must match LHS ('double'). To check and coerce would impact performance too much for the fastest cases. Either change the type of the target column, or coerce the RHS of := yourself (e.g. by using 1L instead of 1)
> DT
date id v1 v2 c
1: 2018-01-01 a 5 -20 0
2: 2018-01-01 b -8 -6 0
3: 2018-01-01 c -11 14 -20
4: 2018-01-02 a -6 -9 0
5: 2018-01-02 b -7 -3 0
6: 2018-01-02 c -10 -5 0
7: 2018-01-03 a -13 19 -20
8: 2018-01-03 b -2 12 -20
9: 2018-01-03 c -14 -16 0
date
和
id
每一行都是唯一的,我更难理解为什么不对每个
group
进行评估。 ,在这种情况下,即每一行。
.SDcols = .(date, id)
和
.SD
在
ifelse
,但我不知道如何使用
.SD
在
ifelse
.
最佳答案
您需要使用 pmin
而不是 min
:
DT[, c := ifelse(v1 < 0 & v2 > 0, pmin(-v1, v2), 0)]
> DT
date id v1 v2 c
1: 2018-01-01 a 5 -20 0
2: 2018-01-01 b -8 -6 0
3: 2018-01-01 c -11 14 11
4: 2018-01-02 a -6 -9 0
5: 2018-01-02 b -7 -3 0
6: 2018-01-02 c -10 -5 0
7: 2018-01-03 a -13 19 13
8: 2018-01-03 b -2 12 2
9: 2018-01-03 c -14 -16 0
# see also:
?pmin
pmax*() and pmin*() take one or more vectors as arguments, recycle them to common length and return a single vector giving the ‘parallel’ maxima (or minima) of the argument vectors.
DT[, v1:= as.numeric(v1)] # was integer, converting to 'double'
DT[, v2:= as.numeric(v2)] # ---,,---
DT[, c := ifelse(v1 < 0 & v2 > 0, min(-v1, v2), 0), by = list(date, id)]
Unlike <- for data.frame, the (potentially large) LHS is not coerced to match the type of the (often small) RHS. Instead the RHS is coerced to match the type of the LHS, if necessary. Where this involves double precision values being coerced to an integer column, a warning is given (whether or not fractional data is truncated). The motivation for this is efficiency. It is best to get the column types correct up front and stick to them. Changing a column type is possible but deliberately harder: provide a whole column as the RHS. This RHS is then plonked into that column slot and we call this plonk syntax, or replace column syntax if you prefer. By needing to construct a full length vector of a new type, you as the user are more aware of what is happening, and it’s clearer to readers of your code that you really do intend to change the column type.
# To check and coerce would impact performance too much for the fastest cases.
data.table
,没有人会注意到这种情况下的性能影响。将允许隐式类型转换。所以这个错误消息的主要动机似乎是包作者想要强制执行他认为是好的做法。
DT[, c := ifelse(v1 < 0 & v2 > 0, as.numeric(min(-v1, v2)), 0), by = list(date, id)] # 1
DT[, c := ifelse(v1 < 0 & v2 > 0, min(-v1, v2), 0L), by = list(date, id)] # 2
c
必须先删除列。
DT$c
在第一种情况下将是数字,在第二种情况下将是整数。
DT[, c:= NULL]
DT[, c := ifelse(v1 < 0, v1, 0), by = list(date, id)]
# error but DT$c col created with first element as NA
# the condition was FALSE for the first element, so numeric 0 became the first element of c
# ... but the next element would be integer, hence the error
DT$c # [1] 0 NA NA NA NA NA NA NA NA
DT[, c:= NULL]
DT[, c := ifelse(v1 > 0, v1, 0), by = list(date, id)]
# error; DT$c column is integer, with 5 as first element and the rest as NA
DT$c # [1] 5 NA NA NA NA NA NA NA NA
DT[, c:= NULL]
DT[, c := ifelse(v1 < 0, as.numeric(v1), 0), by = list(date, id)]
# works without error but results in numeric DT$c
is.numeric(DT$c) # TRUE
DT[, c := ifelse(v1 < 0, v1, 0L), by = list(date, id)]
# type error, DT$c was numeric and we are trying to add an integer column
DT[, c:= NULL] # deleting the c column again
DT[, c := ifelse(v1 < 0, v1, 0L), by = list(date, id)]
# no error now
is.integer(DT$c) # TRUE
关于r - 如何在 R data.table 中按行使用 ifelse?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52797096/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!