R 在创建数据帧之前检查字符向量是否存在
我有一个动态创建的数据帧。数据框有275列,根据我创建的子集,我的数据框可能有几列,也可能没有几列。例如,如果以下是我的数据帧:R 在创建数据帧之前检查字符向量是否存在,r,dataframe,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
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")]}
我有没有办法说,如果b不存在,用c和d创建一个数据框,或者如果c不存在,用b和d创建一个数据框?我们可以使用intersect
df[intersect(v1, names(df))]
# c d
#1 1 4
#2 3 3
假设如果向量
的值在'df'的列名中不存在,则该操作不会出现任何错误
df[intersect(v2, names(df))]
# c d
#1 1 4
#2 3 3
数据
v1
df[intersect(v1, names(df))]
# c d
#1 1 4
#2 3 3
df[intersect(v2, names(df))]
# c d
#1 1 4
#2 3 3
v1 <- c("c", "d")
v2 <- c("e", "c", "d")