我有一个数据框如下:
df = data.frame(n=c(1, 2, 3), m=c(4, 5, 6))
Run Code Online (Sandbox Code Playgroud)
产生以下结果:
n m
1 1 4
2 2 5
3 3 6
Run Code Online (Sandbox Code Playgroud)
现在假设我想用向量替换前两行c(1, 2)。我尝试这样做:
df[1:2,] = c(1, 2)
Run Code Online (Sandbox Code Playgroud)
但这会产生结果
n m
1 1 1
2 2 2
3 3 6
Run Code Online (Sandbox Code Playgroud)
但我想要的是
n m
1 1 2
2 1 2
3 3 6
Run Code Online (Sandbox Code Playgroud)
我尝试设置c(1, 2)为 1x2 的矩阵,看看是否会替换行“行优先”而不是“列优先”,但这不起作用(仍然替换“列优先”)。将矩阵尺寸更改为 2x1 也没有效果。然后我尝试制作c(1, 2)一个数据框并使用数据框替换行,如下所示df[1:2,] = data.frame(c(1, 2)),但这仍然产生了不需要的结果。如果我使用它的转置替换数据帧,也会发生同样的事情t()。有没有办法先替换数据帧行中的行?显然,如果我一次只选择一行,例如 df[1,] = data.frame(c(1, 2)) 它工作得很好,给我
n m
1 1 …Run Code Online (Sandbox Code Playgroud) 我正在构建一个具有以下两个表的 Postgres 数据库:
项目(id、startDate 等...)和员工(id、name 等...)
我想跟踪员工为项目添加的贡献类型。例如,员工#1 可能是项目 1 的“工程师”和项目 2 的“经理”。我也不希望限制员工可以对某个项目做出的贡献数量。因此,员工#1 可以是单个项目的“工程师”和“经理”。
我的第一直觉只是在两个标题为 ProjectEmployees 或其他东西之间建立多对多关系,并将 projectId、employeeId 和tributionType 存储为一个字符串,该字符串只会从枚举中获取值,而不必处理拼写错误或任何相关问题。
我的主要问题是这是否是一种不好的做法。我的另一个想法是将每种贡献类型拆分到自己的表中。因此,不是 EmployeeProjects 表,而是诸如 ProjectEngineers、ProjectManagers 等的表……并且不是将贡献类型存储为列,而是隐式在我正在使用的表中,并且该表只需要存储项目 ID 和员工 ID。该数据库中有更多的表具有类似的关系,其中不同表之间存在多对多关系,但每个关系可能是许多“类型”关系中的一种。对于每种类型的关系,将所有这些都拆分为单独的表是否更明智?或者像我的第一个想法一样在更通用的表中跟踪关系类型更好吗?
我想要的结果是能够有效地查看员工参与的所有项目贡献(和类型),以及查看项目的所有贡献者 + 贡献者类型。