假设我有以下数据
x <- rnorm(100)
Run Code Online (Sandbox Code Playgroud)
我想创建另一个列,其中if x等于或大于0.2,给它一个值1或者0.
我们可以创建逻辑条件并使用 +
xNew <- +(x >=0.2)
Run Code Online (Sandbox Code Playgroud)
如果我们需要data.frame,
dat <- data.frame(x, xNew)
Run Code Online (Sandbox Code Playgroud)
或者使用 ifelse
xNew <- ifelse(x >= 0.2, 1, 0)
Run Code Online (Sandbox Code Playgroud)
小智 6
您想使用Heaviside功能.例如,您可以在fbasics包中找到它.
set.seed(42)
x <- rnorm(100)
library(fBasics)
Heaviside(x, 0.2)
Run Code Online (Sandbox Code Playgroud)
这样做是为了上校的利益:
library(microbenchmark)
set.seed(1492)
x <- rnorm(10000)
microbenchmark(asi=as.integer(x >= 0.2),
asn=as.numeric(x >= 0.2),
pls=+(x >=0.2),
hsd=Heaviside(x, 0.2))
## Unit: microseconds
## expr min lq mean median uq max neval cld
## asi 18.351 20.7575 27.88867 22.4250 22.8695 598.206 100 a
## asn 23.710 25.9740 32.77422 29.2405 29.9860 340.234 100 a
## pls 17.989 20.2640 26.07038 22.6855 23.3020 320.443 100 a
## hsd 88.493 92.2145 148.17850 94.1935 95.5250 2831.695 100 b
Run Code Online (Sandbox Code Playgroud)
如果您完全关心性能,那么Heaviside完全不是您想要做的事情.并且,它只是做:
function (x, a = 0) {
result = (sign(x - a) + 1)/2
result
}
Run Code Online (Sandbox Code Playgroud)
无论如何.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |