确定数据帧的一列中的值是否在另一列R中有多个对应值
尝试对示例客户(EC)的数据框架进行一些数据分析,并试图确定从多个仓库(DC)运送到哪些客户 最终状态目标是将EC的名称与DC进行比较,并确定是否存在映射到多个DC的EC确定数据帧的一列中的值是否在另一列R中有多个对应值,r,dataframe,R,Dataframe,尝试对示例客户(EC)的数据框架进行一些数据分析,并试图确定从多个仓库(DC)运送到哪些客户 最终状态目标是将EC的名称与DC进行比较,并确定是否存在映射到多个DC的EC If(EC > 1 DC) { EC = num(DC) } 显然,上述内容并没有返回我的意图,我甚至不确定这是否需要一个循环。提前谢谢你的帮助 编辑: #一个tible:11 x 10 dc_id ec_id dc_ZIP ec EC_-ZIP`ZIP-ZIP`Miles`修订费率`cost_/mile 1 DC13
If(EC > 1 DC) {
EC = num(DC)
}
显然,上述内容并没有返回我的意图,我甚至不确定这是否需要一个循环。提前谢谢你的帮助
编辑:
#一个tible:11 x 10
dc_id ec_id dc_ZIP ec
EC_-ZIP`ZIP-ZIP`Miles`修订费率`cost_/mile
1 DC13 M2980亚特兰大仓库30168 SAFEWAY奥本GROC奥本
98047 30168-98047 2587 4457 1.72
2 DC13 M29831亚特兰大仓库30168 FRED_MEYER_PV_Dgrpuyalup
98371 30168-98371 2592 4465 1.72
3 DC13 M2983亚特兰大仓库30168好市多洗衣店批发店AUSUMNER
98390 30168-98390 2589 4461 1.72
4 DC13 M2983亚特兰大仓库30168好市多华盛顿批发商
98390 30168-98390 2589 4461 1.72
5 DC13 M1989亚特兰大RDC仓库30168沃尔玛DC 7021GRANDVIEW
98930 30168-98930 2447 4487 1.83
6 DC16 M2015佛罗里达州奥兰多32803
麦肯森苏尔格北堡医学院01532 32803-01532 1244 2254
1.81
7 DC16 M20151佛罗里达州奥兰多32803俱乐部800比丘斯布里奇
01569 32803-01569 1239 2246 1.81
8 DC16 M20181佛罗里达州奥兰多市32803老年医学外科医生烧伤
01801 32803-01801 1276 2305 1.81
9 DC16 M2018佛罗里达州奥兰多市32803 DEMOULAS_SUPER_Marketsbury
01876 32803-01876 1280 2312 1.81
10 DC16 M2020佛罗里达州奥兰多32803
医学专业区0207232803-0207212692294
1.81
11 DC16 M2028佛罗里达州奥兰多市32803马克•史蒂文斯•沃恩索克特W101
02895 32803-02895 1243 2209 1.78
编辑2:
DC <- as.data.frame(dc_ec_cost$DC)
EC <- as.data.frame(dc_ec_cost$EC)
EC$occurences_in_dc <- rowSums(sapply(dc, function(col) dc_ec$EC %in% col))
DCDC也许是这样的
library(tidyverse);
as.data.frame(lst) %>%
group_by(EC) %>%
mutate(nDC = n()) %>%
filter(nDC == 1);
## A tibble: 10 x 8
## Groups: EC [10]
# dc_id ec_id DC DC_ZIP EC EC_ZIP Zip.Zip nDC
# <fct> <fct> <fct> <fct> <fct> <fct> <fct> <int>
# 1 DC2 M2028 ALTA_VISTA_REGIONAL_DC 24517 MARK_STEVEN… 02896 24517-… 1
# 2 DC2 M2028 ALTA_VISTA_REGIONAL_DC 24517 MARK_STEVEN… 02895 24517-… 1
# 3 DC2 M2907 ALTA_VISTA_REGIONAL_DC 24517 RALPHS_GROC… 92507 24517-… 1
# 4 DC2 M2153 ALTA_VISTA_REGIONAL_DC 24517 OK_GROCERYP… 15205 24517-… 1
# 5 DC2 M2379 ALTA_VISTA_REGIONAL_DC 24517 CVS_DISTRIB… 37774 24517-… 1
# 6 DC2 M22740 ALTA_VISTA_REGIONAL_DC 24517 HARRIS_TEET… 28079 24517-… 1
# 7 DC2 M2907 ALTA_VISTA_REGIONAL_DC 24517 RALPHS_PARA… 90723 24517-… 1
# 8 DC2 M2153 ALTA_VISTA_REGIONAL_DC 24517 HBC_SERVICE… 15301 24517-… 1
# 9 DC2 M2379 ALTA_VISTA_REGIONAL_DC 24517 CVS_DISTRIB… 37922 24517-… 1
#10 DC2 M22740 ALTA_VISTA_REGIONAL_DC 24517 HARRIS_TEET… 27410 24517-… 1
怎么样
library(dplyr)
df %>% group_by(EC, DC) %>%
count() %>%
filter(n > 1)
这是一个测试,如果n>1
,则报告计数
set.seed(2)
df2 <- data.frame(
EC = sample(LETTERS[1:8], 20, replace = TRUE),
DC = sample(letters[1:8], 20, replace = TRUE)
)
df2 %>% group_by(EC, DC) %>%
count() %>%
filter(n > 1)
# # A tibble: 3 x 3
# # Groups: EC, DC [3]
# EC DC n
# <chr> <chr> <int>
# 1 A h 2
# 2 C b 2
# 3 D g 3
set.seed(2)
df2%组别单位(EC、DC)%>%
计数()%>%
过滤器(n>1)
##tibble:3 x 3
##组别:欧共体、DC[3]
#EC DC n
#
#1 A h 2
#2cb2
#三维g 3
您可以发布样本数据吗?请使用dput(df)
的输出编辑问题。或者,如果dput(头部(df,20))的输出太大
。(df
是您数据集的名称。)@RuiBarradas发布在上面,希望此帮助显示您是否希望将客户与发货订单匹配?dc_id和ec_id看起来有不同的形式。欧共体和DC也是如此。你能描述一下一场比赛会是什么样子吗?@DanHall从那以后,我就更倾向于用dc_id和EC名称进行比较。所以或多或少:对于Mark_Stevem来说,有多少DC与该名称匹配。有道理?通过将DC ID与实际EC名称进行匹配可能是最简单的方法。我仍然对您试图比较的内容感到困惑。DC_ID始终是DC2。实际EC名称是什么?是EC元素的值吗?您的示例中没有匹配项,而且它们的形式也不相同。我如何处理非数字数据$运算符对于原子向量无效“是尝试编写代码时收到的错误。我看到您添加了示例数据。我应该等着看结构是什么:)在我的玩具样本中,有两个数据帧,一个dc,一个ec。这些原则是适用的,但是是的,在这里,一个列是从一个数据框中提取出来的,其中包含$,如果你看到我刚才添加的代码,看起来我们就快到了。有什么想法吗?错误:nDC没有found@Franchise啊,是的,我把n
改成了nDC
。很抱歉,现在应该已修复,请重试。请注意,这只是一个艰难的开始;由于示例数据实际上不包含每个EC
有多个条目的行,因此很难提供特定的解决方案。谢谢。我更新了我的代码片段以包含多个DC,请告诉我这是否有帮助。
library(tidyverse);
as.data.frame(lst) %>%
group_by(EC) %>%
mutate(nDC = n()) %>%
filter(nDC == 1);
## A tibble: 10 x 8
## Groups: EC [10]
# dc_id ec_id DC DC_ZIP EC EC_ZIP Zip.Zip nDC
# <fct> <fct> <fct> <fct> <fct> <fct> <fct> <int>
# 1 DC2 M2028 ALTA_VISTA_REGIONAL_DC 24517 MARK_STEVEN… 02896 24517-… 1
# 2 DC2 M2028 ALTA_VISTA_REGIONAL_DC 24517 MARK_STEVEN… 02895 24517-… 1
# 3 DC2 M2907 ALTA_VISTA_REGIONAL_DC 24517 RALPHS_GROC… 92507 24517-… 1
# 4 DC2 M2153 ALTA_VISTA_REGIONAL_DC 24517 OK_GROCERYP… 15205 24517-… 1
# 5 DC2 M2379 ALTA_VISTA_REGIONAL_DC 24517 CVS_DISTRIB… 37774 24517-… 1
# 6 DC2 M22740 ALTA_VISTA_REGIONAL_DC 24517 HARRIS_TEET… 28079 24517-… 1
# 7 DC2 M2907 ALTA_VISTA_REGIONAL_DC 24517 RALPHS_PARA… 90723 24517-… 1
# 8 DC2 M2153 ALTA_VISTA_REGIONAL_DC 24517 HBC_SERVICE… 15301 24517-… 1
# 9 DC2 M2379 ALTA_VISTA_REGIONAL_DC 24517 CVS_DISTRIB… 37922 24517-… 1
#10 DC2 M22740 ALTA_VISTA_REGIONAL_DC 24517 HARRIS_TEET… 27410 24517-… 1
lst <- structure(list(dc_id = c("DC2", "DC2", "DC2", "DC2", "DC2", "DC2",
"DC2", "DC2", "DC2", "DC2"), ec_id = c("M2028", "M2028", "M2907",
"M2153", "M2379", "M22740", "M2907", "M2153", "M2379", "M22740"
), DC = c("ALTA_VISTA_REGIONAL_DC", "ALTA_VISTA_REGIONAL_DC",
"ALTA_VISTA_REGIONAL_DC", "ALTA_VISTA_REGIONAL_DC",
"ALTA_VISTA_REGIONAL_DC",
"ALTA_VISTA_REGIONAL_DC", "ALTA_VISTA_REGIONAL_DC",
"ALTA_VISTA_REGIONAL_DC",
"ALTA_VISTA_REGIONAL_DC", "ALTA_VISTA_REGIONAL_DC"), DC_ZIP = c("24517",
"24517", "24517", "24517", "24517", "24517", "24517", "24517",
"24517", "24517"), EC = c("MARK_STEVENS_MERCHANDISENORTH_SMITHFIE",
"MARK_STEVENS_W101WOONSOCKET", "RALPHS_GROCERYRIVERSIDE",
"OK_GROCERYPITTSBURGH",
"CVS_DISTRIBUTION_INCLOUDON", "HARRIS_TEETER_SUPERMARKEINDIAN_TRAIL",
"RALPHS_PARAMOUNT_DISTRIBPARAMOUNT", "HBC_SERVICE_COWASHINGTON",
"CVS_DISTRIBUTION_T101KNOXVILLE", "HARRIS_TEETER_SUPERMARKEGREENSBORO"
), EC_ZIP = c("02896", "02895", "92507", "15205", "37774", "28079",
"90723", "15301", "37922", "27410"), `Zip-Zip` = c("24517-02896",
"24517-02895", "24517-92507", "24517-15205", "24517-37774", "24517-28079",
"24517-90723", "24517-15301", "24517-37922", "24517-27410")))
library(dplyr)
df %>% group_by(EC, DC) %>%
count() %>%
filter(n > 1)
set.seed(2)
df2 <- data.frame(
EC = sample(LETTERS[1:8], 20, replace = TRUE),
DC = sample(letters[1:8], 20, replace = TRUE)
)
df2 %>% group_by(EC, DC) %>%
count() %>%
filter(n > 1)
# # A tibble: 3 x 3
# # Groups: EC, DC [3]
# EC DC n
# <chr> <chr> <int>
# 1 A h 2
# 2 C b 2
# 3 D g 3