R 从数据帧中排除变量组合
我有两个数据帧,第一个是所有变量组合的列表(稍后我将在代码中循环) DataFrame是一个示例:R 从数据帧中排除变量组合,r,R,我有两个数据帧,第一个是所有变量组合的列表(稍后我将在代码中循环) DataFrame是一个示例: time_period store_type category_type month store lvl1 month store lvl2 month format lvl1 month format lvl2 week store
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你好我还没来得及编辑,但你的方式似乎是对的:-)