我有一个动态创建的数据框。数据框有275列,根据我创建的子集,我的数据框可能有也可能没有列。例如,如果以下是我的数据框:
a b c d
1 1 1 4
2 2 3 3
有时我可能得到a,b,c,在其他情况下它可能是a,b,d或b,c,d - 取决于数据的可用性以及我无法控制的数据。其中,列b,c,d属于一组变量,因此我必须对它们进行子集以进行进一步的数据操作。我正在使用以下代码来检查列是否存在,如果存在则创建子集。
if("c" %in% colnames(df)) {c <- df[,c("c")]}
c是df。
中列的名称上面的代码返回一个包含&#34; c&#34;值的字符向量。对于b和d也是如此。我正在使用以下代码将这些字符向量转换为数据框:
newdf <- as.data.frame(cbind(b,c,d))
如果所有列都退出,这很有效。但是,例如,如果b不存在,则上述代码会抛出一个错误,表明b不存在。
如何仅使用存在的那些矢量创建数据框?例如,在上述情况下,它将是
c d
1 4
3 3
有没有办法可以说,如果b不存在,用c和d创建一个数据框,或者如果c不存在则用b和d创建数据框?
答案 0 :(得分:2)
我们可以使用交叉
df[intersect(v1, names(df))]
# c d
#1 1 4
#2 3 3
假设vector
的列名“df”中不存在值,则无错误
df[intersect(v2, names(df))]
# c d
#1 1 4
#2 3 3
v1 <- c("c", "d")
v2 <- c("e", "c", "d")