我在R中有以下数据框
no qc6 qc5 qc3 itv6 itv5 itv3
123 12 12 14 8 9 9
Run Code Online (Sandbox Code Playgroud)
现在,我想检查数据框中是否存在以下列,如果没有,则创建一个值为0的新列.
qc1,qc2,itv1,itv2
Run Code Online (Sandbox Code Playgroud)
我可以用R中的if循环来做
if(!"qc1" %in% colnames(df))
{
df$qc1 <- 0
}
Run Code Online (Sandbox Code Playgroud)
但是,我将不得不为每个要创建的变量编写循环.有没有更快的方法呢?
如果您有一个您知道应该包含的名称向量,则以下内容将检查它们是否已有列.如果没有,他们将创建一个值为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
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
no qc6 qc5 qc3 itv6 itv5 itv3 qc1 qc2 itv1 itv2
123 12 12 14 8 9 9 0 0 0 0
Run Code Online (Sandbox Code Playgroud)