如何在数据中搜索特定的列名称

时间:2015-09-25 20:58:07

标签: r

所以这有点奇怪,我对R很新,面对这个奇怪的问题。 我有一个数据框,有一个名为SNDATE的列,它是两个不同列的组合值。

我想检查数据框是否有一个名为SN的列,如果它没有,我将拆分SNDATE以填充SN列。

这是代码

if(!('SN' %in% colnames(data))){
     #do some spliting here
}

有趣的是,它一直在说那里,其中的东西永远不会被触发。 当我这样做时:

print(data$SN)

它将打印data$SNDATE的值。那么R有某种懒惰的名字填充或什么?这对我来说很奇怪。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

当你这样做时

print(data$SN)

它有效,因为$正在使用部分名称匹配。再举一个例子,试试

mtcars$m

没有名为m的列,因此$部分匹配mpg。遗憾的是,%in%中未使用此功能,因此您需要在

中使用完整的精确列名称
if(!('SNDATE' %in% colnames(data))){
     #do some spliting here
}

你可以使用pmatch()

的内容
names(mtcars)[2] <- "SNDATE"
names(mtcars)[pmatch("SN", names(mtcars))]
# [1] "SNDATE"

所以if()语句可能会像这样 -

nm <- colnames(data)
if(!nm[pmatch("SN", nm)] %in% nm) {
    ...
}

甚至

if(is.na(pmatch("SN", names(data)))

可能会更好