如何在R data.table中按名称选择重名列中的特定列?
如何在data.table中选择重名的"a.2"列?
首先要明确:你在View(DT)里看到的a.2、a.3这类名称,是RStudio为了区分重名列自动添加的显示用后缀,并不是data.table实际存储的列名。实际列名还是colnames(DT)返回的重复值:"a", "a", "a", "b", "a"。所以直接用DT[, "a.2"]会找不到列,可通过以下方法解决:
方法1:通过列位置选择
如果确定目标列是第2列(对应View里的a.2),直接用索引选择:
# 选择第2列 DT[, 2] # 用data.table的..语法保留列名 DT[, ..c(2)]
方法2:先重命名列,再按名称选择
用make.unique()给重复列名自动添加后缀,和View显示的命名规则一致,之后就能直接按名称选择:
# 重命名列,生成a、a.2、a.3、b、a.4的列名 setnames(DT, make.unique(colnames(DT))) # 现在可直接选择a.2列 DT[, "a.2"]
方法3:通过列名匹配定位后选择
如果不确定目标列的位置,先找到所有名为"a"的列索引,再选取第2个:
# 定位所有"a"列的索引,取第2个 target_col <- which(colnames(DT) == "a")[2] # 选择目标列 DT[, target_col, with = FALSE] # 或者用.SDcols写法 DT[, .SD, .SDcols = target_col]
内容的提问来源于stack exchange,提问作者Danilo Correa
相关产品推荐
相关产品推荐

