Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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 - Fatal编程技术网

R 从数据帧中排除变量组合

R 从数据帧中排除变量组合,r,R,我有两个数据帧,第一个是所有变量组合的列表(稍后我将在代码中循环) DataFrame是一个示例: time_period store_type category_type month store lvl1 month store lvl2 month format lvl1 month format lvl2 week store

我有两个数据帧,第一个是所有变量组合的列表(稍后我将在代码中循环)

DataFrame是一个示例:

 time_period    store_type  category_type
 month          store       lvl1
 month          store       lvl2
 month          format      lvl1
 month          format      lvl2
 week           store       lvl1
 week           store       lvl2
 week           format      lvl1
 week           format      lvl2
第二个dataframe包含我想在代码中继续之前从dataframeA中排除的组合。空白单元格表示我要排除所有该类型,例如,在下面的第一行中,我要排除store和lvl1组合的所有时间段

DataframeB示例:

 time_period    store_type  category_type
                store       lvl1
 month          store       lvl2
我希望以这样一种方式应用排除:DataframeB首先删除存储x lvl1的组合(即从DataframeA中删除第1行和第5行),然后删除月份x存储x lvl2的组合(即从DataframeA中删除第2行)

生成的数据帧将结束为:

 time_period    store_type  category_type
 month          format      lvl1
 month          format      lvl2
 week           store       lvl2
 week           format      lvl1
 week           format      lvl2
我已经编写了一个解决方案,但必须依靠逐个循环通过排除组合,因此我希望有一个更优雅的解决方案:)


all_excludes您首先需要对
DataframeB
进行一些处理,以便它包含要从
DataframeA
中删除的所有行:

for_all <- which(DataframeB$time_period=="")
DB <- rbind(DataframeB, 
            data.frame(time_period="week", DataframeB[for_all, 2:3], stringsAsFactors=F), 
            data.frame(time_period="month", DataframeB[for_all, 2:3], stringsAsFactors=F)
           )[-for_all, ]
或使用
dplyr

library(dplyr)
anti_join(DataframeA, DataframeB)
#Joining by: c("time_period", "store_type", "category_type")
#  time_period store_type category_type
#1       month     format          lvl2
#2       month     format          lvl1
#3        week     format          lvl1
#4        week     format          lvl2
#5        week      store          lvl2

首先需要对
DataframeB
进行一些处理,以便它包含要从
DataframeA
中删除的所有行:

for_all <- which(DataframeB$time_period=="")
DB <- rbind(DataframeB, 
            data.frame(time_period="week", DataframeB[for_all, 2:3], stringsAsFactors=F), 
            data.frame(time_period="month", DataframeB[for_all, 2:3], stringsAsFactors=F)
           )[-for_all, ]
或使用
dplyr

library(dplyr)
anti_join(DataframeA, DataframeB)
#Joining by: c("time_period", "store_type", "category_type")
#  time_period store_type category_type
#1       month     format          lvl2
#2       month     format          lvl1
#3        week     format          lvl1
#4        week     format          lvl2
#5        week      store          lvl2

谢谢你的回复。我认为问题是在空白单元格中,因为这只是一个简化的例子,在完整的DATAFRAMB中,有更多的行,对于其他列中的空白-有没有办法用所有可能的值来概括空白单元格的填充?我已经考虑了您的建议,将采用填充空白的方法,但将从dataframeA创建一个唯一的时间段列表,并使用合并来扩展dataframeB并填充gaps@SamGilbert你好我还没来得及编辑,但你的方式似乎是对的:-)谢谢你的回复。我认为问题是在空白单元格中,因为这只是一个简化的例子,在完整的DATAFRAMB中,有更多的行,对于其他列中的空白-有没有办法用所有可能的值来概括空白单元格的填充?我已经考虑了您的建议,将采用填充空白的方法,但将从dataframeA创建一个唯一的时间段列表,并使用合并来扩展dataframeB并填充gaps@SamGilbert你好我还没来得及编辑,但你的方式似乎是对的:-)