我在R
中有以下数据框 no qc6 qc5 qc3 itv6 itv5 itv3
123 12 12 14 8 9 9
现在,我想检查数据框中是否存在以下列,如果没有,则创建一个值为0的新列。
qc1,qc2,itv1,itv2
我可以在R
中使用if循环 if(!"qc1" %in% colnames(df))
{
df$qc1 <- 0
}
但是,我必须为每个要创建的变量编写循环。有没有更快的方法呢?
答案 0 :(得分:7)
如果您有一个知道名称的向量,则以下内容将检查它们是否已有列。如果没有,他们将创建一个值为0的。
x <- c( "qc1","qc2","itv1","itv2", "no" )
d <- data.frame( no = 123, qc6 = 12, qc5 = 12, qc3 = 14, itv6 = 8, itv5 = 9, itv3 = 9)
d[x[!(x %in% colnames(d))]] = 0
d
这给出了输出:
no qc6 qc5 qc3 itv6 itv5 itv3 qc1 qc2 itv1 itv2
123 12 12 14 8 9 9 0 0 0 0