tja*_*787 -2 r normalization data.table
尝试标准化数据框中的所有行,以便
A B C A B C
1 2 4 => 1 .3 .6
2 2 5 2 .3 .7
3 4 6 3 .4 .6
Run Code Online (Sandbox Code Playgroud)
这会返回一个警告,表明它正在强制转换为整数
outdf <- df[, names(df) := (.SD / rowSums(.SD)), .SDcols=x,by=y]
Run Code Online (Sandbox Code Playgroud)
这没有任何作用
outdf <- df[, names(df) := as.numeric(x)][,x:=(.SD / rowSums(.SD)), .SDcols=x,by=y][]
Run Code Online (Sandbox Code Playgroud)
这些都很接近。有没有更好的方法来改变类型或者更好的方法来规范化。(进入这一行的数据约为 42GB,因此 data.table 是正确的选择)
编辑:
x 和 y
x <- names(data)[14:ncol(data)]
y <- names(data)[1]
Run Code Online (Sandbox Code Playgroud)
我想你可能想多了。这似乎达到了预期的效果:
library(data.table)
X <- data.table(A=c(1,2,2), B=c(2,2,4))
X[ , .SD/rowSums(.SD)]
# using .SDcols can be used to make this selective
A B
1: 0.3333333 0.6666667
2: 0.5000000 0.5000000
3: 0.3333333 0.6666667
Run Code Online (Sandbox Code Playgroud)
我在分配给 X 来完成预期的替换时没有遇到任何问题。
演示使用.SDcols和by参数不会影响这一点。(并注意,无论如何,使用参数不会影响面向行的操作by。)
X <- data.table(ID =letters[1:3], A=c(1,2,2), B=c(2,2,4))
X <- rbind(X,X) # so there are multiple items in the groups
X <- X[ , .SD/rowSums(.SD), .SDcols=c("A", "B"), by="ID"]
# Only effect of the `by="ID"` seem to be an alpha sort
> X
ID A B
1: a 0.3333333 0.6666667
2: a 0.3333333 0.6666667
3: b 0.5000000 0.5000000
4: b 0.5000000 0.5000000
5: c 0.3333333 0.6666667
6: c 0.3333333 0.6666667
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |