繁体   English   中英

R data.table 如何规范化所有行

[英]R data.table how to normalize all rows

尝试规范化数据框中的所有行,以便

A B C      A   B   C
1 2 4 =>   1  .3  .6
2 2 5      2  .3  .7
3 4 6      3  .4  .6

将返回一个警告,它正在强制转换为 integer

outdf <- df[, names(df) := (.SD / rowSums(.SD)), .SDcols=x,by=y]

什么都不做

outdf <- df[, names(df) := as.numeric(x)][,x:=(.SD / rowSums(.SD)), .SDcols=x,by=y][]

这两个很接近。 有没有更好的方法来更改类型或更好的规范化方法。 (数据是 ~42GB 进入这条线所以 data.table 是要走的路)

编辑:

x 和 y

x <- names(data)[14:ncol(data)]
y <- names(data)[1]

我想你可能想多了。 这似乎做了我们想要的:

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

我在分配给 X 以完成预期的替换时没有遇到任何问题。

演示by .SDcols和参数不影响这一点。 (并且注意,无论如何,预计不会通过使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM