在给定条件下从 data.table 中提取所需的列

问题描述 投票:0回答:1

这是我的数据集。

DTmtcars = as.data.table(mtcars); DTmtcars[, mtcarsname := rownames(mtcars)];

这些是用户输入,可能会有所不同, 至少有 1 个始终可用,可以按任意顺序, 这些用户输入只是告诉 data.table 的列名称

DTmtcars
.

这是这个问题的样本。

column1="mtcarsname";
column2="am";
column3="gear";
column4=NA;

要求显示数据集的这些列。

该代码是上述示例用户输入的理想解决方案。

DTmtcars[, .(w,x,y) , env =  list(w=column1, x = column2,y =column3,z = column4)]

可能是 ifelse/fielse 或任何其他使该代码动态化的东西,以便为用户输入的所有可能组合生成输出。

输出应该是 data.table 而不是向量或 concat。 代码应该高效并且可以应用于非常大的数据集。 如果可以仅使用 data.table 包来完成,我将不胜感激。

r data.table
1个回答
0
投票

看来你不希望 NA 列在这里出现,这是我的尝试

library(data.table)
DTmtcars = as.data.table(mtcars); DTmtcars[, mtcarsname := rownames(mtcars)];
column1="mtcarsname";
column2="am";
column3="gear";
column4=NA;

DTmtcars[,.SD, .SDcols = na.omit(c(column1,column2,column3,column4))]

这会导致

             mtcarsname    am  gear
                 <char> <num> <num>
 1:           Mazda RX4     1     4
 2:       Mazda RX4 Wag     1     4
 3:          Datsun 710     1     4
 4:      Hornet 4 Drive     0     3
 5:   Hornet Sportabout     0     3
 6:             Valiant     0     3
 7:          Duster 360     0     3
 8:           Merc 240D     0     4
 9:            Merc 230     0     4
10:            Merc 280     0     4
11:           Merc 280C     0     4
             ....
© www.soinside.com 2019 - 2024. All rights reserved.