![](/img/trans.png)
[英]Normalization using a control (specific range of data in the column) using data.table in R
[英]Restrict column to specific range using data.table in R
我在R中使用data.table
包,並希望對列執行操作。 具體來說,我想強制所有值均為(0,1)。
讓我們在這里使用一個簡單的示例:
data = data.table(x = rnorm(10))
我的數據存儲為data.table
所以我想我可以做這樣的事情:
data[, newx := max(min(x, 1), 0)]
但是集合函數( min
和max
)計算向量min / max。
好的,因此我進行了更改,添加了一個by=.I
語句:
data[, newx := max(min(x, 1), 0), by=.I]
但這也不起作用!
使用data.table
完成此類任務的正確方法是什么?
您可以創建一個虛擬索引,並在不再需要它時將其刪除,如下所示:
data[,Idx := .I][, newx := max(min(x, 1), 0), by = "Idx"][, Idx := NULL][]
# x newx
# 1: 1.12585452 1.0000000
# 2: 0.82343338 0.8234334
# 3: -1.02227889 0.0000000
# 4: 1.42761362 1.0000000
# 5: 0.77371518 0.7737152
# 6: -0.22261010 0.0000000
# 7: -0.64862015 0.0000000
# 8: -0.45663845 0.0000000
# 9: -0.96332902 0.0000000
# 10: -0.04396755 0.0000000
您也可以嘗試簡單的ifelse
即
data[, newX:= ifelse(x >1,1,x)][, newX:= ifelse(x < 0, 0,x)]
更簡單,更快捷的方法是按段進行定義:
set.seed(13084)
data = data.table(x = rnorm(10))
> data[ , newx := (xg1 <- x > 1) + x * (!xg1 & x > 0)][]
x newx
1: 0.7842597 0.7842597
2: -0.3935582 0.0000000
3: -2.3379063 0.0000000
4: -1.7428335 0.0000000
5: 0.1678035 0.1678035
6: -0.9558911 0.0000000
7: -1.5592778 0.0000000
8: 0.9358569 0.9358569
9: 0.7778178 0.7778178
10: 1.0937594 1.0000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.