gpt4 book ai didi

r - 转换 data.table 中的一组列

转载 作者:行者123 更新时间:2023-12-04 02:02:53 25 4
gpt4 key购买 nike

A data.table新手问题。
我想转换 data.table 中的一组列通过对它们应用数学公式。列集必须排除总列数中的 1 个或多个。

data.frame我会做的条款:

data(iris)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

iris[, -5] <- iris[, -5] * 1e3
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5100 3500 1400 200 setosa
2 4900 3000 1400 200 setosa
3 4700 3200 1300 200 setosa
4 4600 3100 1500 200 setosa
5 5000 3600 1400 200 setosa
6 5400 3900 1700 400 setosa

我知道如何选择 multiple columnsdata.table :
iris.dt <- data.table(iris)
head(iris.dt[, -5, with = FALSE])

甚至:
head(iris.dt[, !"Species", with = FALSE])

如何利用 data.table 实际转换那些选定的列传递引用?

最佳答案

使用 .SDCols 怎么样?参数和引用赋值( := ):

DT <- data.table(iris)
DT[, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
:=lapply(.SD, function(x) x*1000), .SDcols=1:4]
# Alternatively you can grab the names the usual way:
# DT[, names(DT)[1:4] := lapply(.SD, function(x) x*1000), .SDcols=1:4]
DT
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1: 5100 3500 1400 200 setosa
# 2: 4900 3000 1400 200 setosa
# 3: 4700 3200 1300 200 setosa
# 4: 4600 3100 1500 200 setosa
# 5: 5000 3600 1400 200 setosa
# ---
# 146: 6700 3000 5200 2300 virginica
# 147: 6300 2500 5000 1900 virginica
# 148: 6500 3000 5200 2000 virginica
# 149: 6200 3400 5400 2300 virginica
# 150: 5900 3000 5100 1800 virginica

关于r - 转换 data.table 中的一组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13623324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com