R语言 在data.table中同时计算和重命名列

de90aj5v  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(145)

我有一个data.table,其中包含出生年份的“year”列:

library(data.table)

people <- data.table("year" = 1990:1992)

我想将此列重命名为“age”,同时在data.table中计算值:

setnames(people, c("year"), c("age" := 2023 - "age"))

setnames(people, c("year"), c("age" := 2023 - "year"))

为什么我的代码不工作?

qyzbxkaa

qyzbxkaa1#

关于“为什么不工作?*",您应该检查setnames的用法。当您键入?setnames时,您会看到以下语法

setnames(x,old,new,skip_absent=FALSE)

并且参数new描述如下:
可选。它可以是函数或新列名。如果是一个函数,它将用old调用,并期望返回新的列名。新列名的长度必须与提供给旧参数的列的长度相同。
可以分配新名称,但不能分配命名列
要使其工作,您可以使用以下链接表达式

> people[, age := 2023 - year][, year := NULL][]
   age
1:  33
2:  32
3:  31
bis0qfac

bis0qfac2#

我们可以使用 setnames 来更改名称,然后计算年龄:

setnames(people, old = "year", new = "age")[, age := 2023 - age]

people
#    age
# 1:  33
# 2:  32
# 3:  31

**注意:**Tomas的回答解释了“为什么 setnames 不起作用”。这个答案是遵循OP使用 setnames 的初衷,表明可以在 setnames 之后链接[]

相关问题