gpt4 book ai didi

r - 如何将列列表传递给 data.table,其中一些是预先确定的

转载 作者:行者123 更新时间:2023-12-02 09:37:16 24 4
gpt4 key购买 nike

将字符向量和列名传递给 data.table作为列列表?
我希望能够使用 data.table 在 R 中生成列的子集,以便我可以更早地确定其中一些列并将预定列表作为字符向量传递,然后与列的静态列表组合。
也就是说,鉴于此:

a <- 1:4
b <- 5:8
c <- c('aa','bb','cc','dd')
e <- 1:4

z <- data.table(a,b,c,e)
我想做这个:
z[, list(a,b)]
产生这个输出:
   a b
1: 1 5
2: 2 6
3: 3 7
4: 4 8
但我想以与此类似的某种方式来做(几乎有效):
cols <- "b"
z[, list(get(cols), a)]
结果:
请注意,它不会返回存储在 cols 中的列的名称。
   V1 a
1: 5 1
2: 6 2
3: 7 3
4: 8 4
但我需要用多个 cols 的元素来做这件事(这不起作用):
cols <- c('a', 'b')
z[, list(mget(cols), c)]
以上产生以下错误:
Error: value for ‘a’ not found
我认为我的问题在于范围和环境 mget正在查看,但我无法弄清楚我到底做错了什么。另外,如何保留列标题?

最佳答案

这里有两个(几乎等价的)选项。一个使用 lapply :

z[, c(lapply(cols, get), list(c))]
# V1 V2 V3
#1: 1 5 aa
#2: 2 6 bb
#3: 3 7 cc
#4: 4 8 dd

还有一个使用 mget :
z[, c(mget(cols, inherits = TRUE), c = list(c))]
# a b c
#1: 1 5 aa
#2: 2 6 bb
#3: 3 7 cc
#4: 4 8 dd

请注意 get返回一个丢失列名信息的向量(除了手动将其重新添加之外,您无能为力),而 mget返回一个命名列表。

关于r - 如何将列列表传递给 data.table,其中一些是预先确定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274815/

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