gpt4 book ai didi

sql - 相当于 sql 更新?

转载 作者:行者123 更新时间:2023-12-01 03:51:19 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Conditional merge/replacement in R

(7 个回答)


4年前关闭。




我环顾四周,找不到简单的答案。
我该如何做 SQL 中的更新表?
例如:

> df1 = data.frame(id=seq(1:3), v1=c("a", "b", NA))
> df1
id v1
1 1 a
2 2 b
3 3 <NA>
> df2 = data.frame(id=seq(1:3), v2=c("z", "y", "c"))
> df2
id v2
1 1 z
2 2 y
3 3 c

如何使用 v1 中 v2 的值更新 df1,但仅当 id 匹配且 id > 2 时?
我查看了 data.table,但无法弄清楚 := 语法,并希望在基本 R 中有一些简单的东西?期望的输出是:
> df1
id v1
1 1 a
2 2 b
3 3 c

最佳答案

df1 中存在 ID 时,已更新为工作不在 df2 ,以及如果订单不同。只要只有一个 id 就可以工作柱子:

df1 <- data.frame(id=seq(1:5), v1=c("a", "b", NA, NA, NA), stringsAsFactors=F)
df2 <- data.frame(id=seq(1:3), v2=c("z", "y", "c"), stringsAsFactors=F)

df1[df1$id > 2, -1] <- df2[df1$id[df1$id > 2], -1]
df1

产生:
  id   v1
1 1 a
2 2 b
3 3 c
4 4 <NA>
5 5 <NA>

这是一个简单的解决方案,只要两个数据帧具有相同的 id 集就可以工作:
df1[df1$id > 2, ] <- df2[df1$id > 2, ]

产生:
  id v1
1 1 a
2 2 b
3 3 c

重要的是, v1v2需要是字符,所以在它们之前运行它 factor默认情况下:
df1$v1 <- as.character(df1$v1)    
df2$v2 <- as.character(df2$v2)

如果您需要加入多个列,或者如果一个表中的 id 并不全部存在于另一个表中,您可以使用 mergedata.table在一个表上获取两个变量,然后通过将列与 ifelse 组合来构造新列.

关于sql - 相当于 sql 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com