Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在创建数据帧之前检查字符向量是否存在_R_Dataframe - Fatal编程技术网

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

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

我有一个动态创建的数据帧。数据框有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")]}
我有没有办法说,如果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")