我一直在为在线商店系统设计数据库.通过阅读本网站上的一些帖子,我遇到的问题是,虽然我可以使用复合主键,但我会在下面解释一下,这是不是很糟糕的做法(根据我在这方面阅读的帖子)在stackoveflow上,很多人说这是一个不好的做法所以这就是我要问的原因.
我想在单独的表格中存储订单付款.原因在于,订单可以包含许多项目,这些项目以多对多关系的形式在单独的表格中处理.现在,如果我不使用复合主键作为我的付款表,我将失去我的独特性PaymentID:
[PaymentId] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[OrderId] INT NOT NULL PRIMARY KEY --Also a Foreign Key--
Run Code Online (Sandbox Code Playgroud)
现在,如果我只删除主键OrderId,我会在这里丢失我的一对一关系Many OrderIds can be associated to many PaymentIds,我不想要这个.
这就是为什么这里先前提出的问题已经(大多数时候)得出结论,复合键是一个坏主意.所以我想为自己澄清一下; 如果不好,那么最佳做法是什么?
我想通过索引号迭代python中的字典.
示例:
dict = {'apple':'red','mango':'green','orange':'orange'}
Run Code Online (Sandbox Code Playgroud)
我想从头到尾遍历字典,以便我可以通过索引访问字典项.例如,第1项将是苹果,第2项将是芒果,值将为绿色.
像这样的东西:
for i in range(0,len(dict)):
dict.i
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数tidyverse/dplyr,我想最终使用lapply(或map).(我一直在努力回答这个问题,但发现了一个有趣的结果/死胡同.请不要将其标记为重复 - 这个问题是你在那里看到的答案的延伸/背离.)
是否有
1)获取引用变量列表以在dplyr函数内工作
(并且不使用已弃用的SE_函数)的方法, 或者是
2)某种方式通过一个lapply或多个方式提供一个未加引号的字符串列表map
我使用Programming in Dplyr小插图来构建我认为最符合当前使用NSE标准的功能.
sample_data <-
read.table(text = "REVENUEID AMOUNT YEAR REPORT_CODE PAYMENT_METHOD INBOUND_CHANNEL AMOUNT_CAT
1 rev-24985629 30 FY18 S Check Mail 25,50
2 rev-22812413 1 FY16 Q Other Canvassing 0.01,10
3 rev-23508794 100 FY17 Q Credit_card Web 100,250
4 rev-23506121 300 FY17 S Credit_card Mail 250,500
5 rev-23550444 100 FY17 S Credit_card Web 100,250
6 rev-21508672 …Run Code Online (Sandbox Code Playgroud) 我的数据框看起来像:
> str(b)
'data.frame': 2720 obs. of 3 variables:
$ Hospital.Name: chr "SOUTHEAST ALABAMA MEDICAL CENTER" "MARSHALL MEDICAL CENTER SOUTH" "ELIZA COFFEE MEMORIAL HOSPITAL" "ST VINCENT'S EAST" ...
$ State : chr "AL" "AL" "AL" "AL" ...
$ heart attack : num 14.3 18.5 18.1 17.7 18 15.9 19.6 17.3 17.8 17.5 ...
Run Code Online (Sandbox Code Playgroud)
我想按状态对其进行分组,按状态和心脏病发作对它们进行排序,然后添加一列返回每个组内的行号。理想的结果如下:
# A tibble: 2,720 x 4
# Groups: State [54]
Hospital.Name State `heart attack` rank
<chr> <chr> <dbl> <int>
1 PROVIDENCE ALASKA MEDICAL CENTER AK 13.4 …Run Code Online (Sandbox Code Playgroud) 我正在编写一个聚合数据帧的函数,它通常需要适用于各种各样的数据集.此功能的一个步骤是dplyr的filter功能,用于仅从数据中选择与手头任务相关的广告活动类型.由于我需要灵活的功能,我想要ad_campaign_types作为输入,但这会使过滤变得多毛,如下所示:
aggregate_data <- function(ad_campaign_types) {
raw_data %>%
filter(ad_campaign_type == ad_campaign_types) -> agg_data
agg_data
}
new_data <- aggregate_data(ad_campaign_types = c("campaign_A", "campaign_B", "campaign_C"))
Run Code Online (Sandbox Code Playgroud)
我认为上面的方法可行,但是当它运行时,奇怪的是它只返回过滤数据集的一小部分.有一个更好的方法吗?
另一个可替换代码的小例子:
ad_types <- c("a", "a", "a", "b", "b", "c", "c", "c", "d", "d")
revenue <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
data <- as.data.frame(cbind(ad_types, revenue))
# Now, filtering to select only ad types "a", "b", and "d",
# which should leave us with only 7 values
new_data <- filter(data, ad_types == c("a", …Run Code Online (Sandbox Code Playgroud) 如何正确构建lapply以从所有.csv文件中读取(从一个目录中),将所有列作为字符串加载,然后将它们绑定到一个数据框中.
每此,我有办法让所有加载并装订成数据帧该.csv文件.不幸的是,他们对这些列如何进行类型转换的可变性感到困惑.因此给我这个错误:
错误:无法在列中自动从字符转换为整数
我尝试用数据类型的参数补充代码,并试图将所有内容保存为字符; 我现在陷入困境,能够正确地获得我的'lapply'循环'以有效地引用其'循环'的每个循环的主题.
srvy1 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L,
AFF_ID_INV_RESP = 5L), .Names = c("RESPONSE_ID", "QUESTION_ID",
"SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA,
-1L))
srvy2 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L,
AFF_ID_INV_RESP = "bovine"), .Names = c("RESPONSE_ID", "QUESTION_ID",
"SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA,
-1L))
files = list.files(pattern="*.csv")
tbl = lapply(files, read_csv(files, col_types = cols(.default = col_character()))) %>% bind_rows
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的解决方案,我可以保持整齐,或者我必须下降一个级别,然后自己公开构建for循环 …