尝试对示例客户(EC)的数据框进行一些数据分析,并寻求确定从多个仓库(DC)运送到哪些客户。
最终州的目标是将EC的名称与DC进行比较,并确定是否有EC将多个DC映射到它们。
If(EC > 1 DC) {
EC = num(DC)
}
显然上面的内容并没有回到我的意图,我甚至不确定这需要一个循环。在此先感谢您的帮助。
编辑:
# A tibble: 11 x 10
dc_id ec_id DC DC_ZIP EC
EC_ZIP `Zip-Zip` Miles `Revised Rate` cost_per_mile
<chr> <chr> <chr> <chr> <chr>
<chr> <chr> <dbl> <dbl> <dbl>
1 DC13 M2980 ATLANTA_RDC_WAREHOUSE 30168 SAFEWAY_AUBURN_GROC_DCAuburn
98047 30168-98047 2587 4457 1.72
2 DC13 M29831 ATLANTA_RDC_WAREHOUSE 30168 FRED_MEYER_PV_DGRPUYALLUP
98371 30168-98371 2592 4465 1.72
3 DC13 M2983 ATLANTA_RDC_WAREHOUSE 30168 COSTCO_WASH_WHOLESALE_AUSUMNER
98390 30168-98390 2589 4461 1.72
4 DC13 M2983 ATLANTA_RDC_WAREHOUSE 30168 COSTCO_WASH_WHOLESALESUMNER
98390 30168-98390 2589 4461 1.72
5 DC13 M1989 ATLANTA_RDC_WAREHOUSE 30168 WALMART_DC_7021GRANDVIEW
98930 30168-98930 2447 4487 1.83
6 DC16 M2015 Orlando, FL 32803
MCKESSON_MED_SURG_NORTHBNORTHBOROUGH 01532 32803-01532 1244 2254
1.81
7 DC16 M20151 Orlando, FL 32803 CLUB_800_BJS_DISTRIBUTIOUXBRIDGE
01569 32803-01569 1239 2246 1.81
8 DC16 M20181 Orlando, FL 32803 GERIATRIC_MEDICAL_SURGERWOBURN
01801 32803-01801 1276 2305 1.81
9 DC16 M2018 Orlando, FL 32803 DEMOULAS_SUPER_MARKETSTEWKSBURY
01876 32803-01876 1280 2312 1.81
10 DC16 M2020 Orlando, FL 32803
MEDICAL_SPECIALTIES_DISTSTOUGHTON 02072 32803-02072 1269 2294
1.81
11 DC16 M2028 Orlando, FL 32803 MARK_STEVENS_W101WOONSOCKET
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))
错误是&#34; x必须是2D&#34;
的数组答案 0 :(得分:0)
dc <- data.frame(x = sample(1:20, 10), y = sample(1:20, 10), z = sample(1:20, 10))
ec <- data.frame(w = sample(1:20, 10))
ec$occurences_in_dc <- rowSums(sapply(dc, function(col) ec$w %in% col))
这里我们创建一个数据帧dc,有3列x,y和z 然后我们用一列w。
创建一个数据框ec然后我们在ec,occurences_in_dc中创建一个新列,表示每个ec $ w在dc中的列中出现的次数
与非数字数据相同:
dc <- data.frame(x = sample(letters, 10), y = sample(letters, 10), z = sample(letters, 10))
ec <- data.frame(w = sample(letters, 10))
ec$occurences_in_dc <- rowSums(sapply(dc, function(col) ec$w %in% col))
如果您需要比文字字符串完全匹配更多的灵活性,您可以使用不同的函数grepl
与正则表达式或固定匹配。
答案 1 :(得分:0)
也许是这些方面的东西?
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
说明:将list
转为data.frame
,group_by
列EC
,将每个EC
的条目数存储在nDC
中,并{ {1}} filter
行。
nDC == 1
答案 2 :(得分:0)
怎么样
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