在创建数据框之前检查字符向量是否存在

时间:2016-07-19 07:17:41

标签: r dataframe

我有一个动态创建的数据框。数据框有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创建数据框?

1 个答案:

答案 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")