所以这有点奇怪,我对R很新,面对这个奇怪的问题。
我有一个数据框,有一个名为SNDATE
的列,它是两个不同列的组合值。
我想检查数据框是否有一个名为SN
的列,如果它没有,我将拆分SNDATE
以填充SN
列。
这是代码
if(!('SN' %in% colnames(data))){
#do some spliting here
}
有趣的是,它一直在说那里,其中的东西永远不会被触发。 当我这样做时:
print(data$SN)
它将打印data$SNDATE
的值。那么R有某种懒惰的名字填充或什么?这对我来说很奇怪。
非常感谢你的帮助
答案 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)))
可能会更好