r - 基于R中的其他数据集向一个数据集添加一行
问题描述
我有两个数据集。目的是如果 df2 中出现新代码并且 df2$LABEL 设置为 PRIV,则向 df1 添加一行。我简单地尝试了 if 子句,但它对我不起作用。我想也许有 dplyr 库的解决方案。我使用的逻辑(也许会有帮助):
df1$CODE != df2$CODE & df2$LABEL == "PRIV"
具有 dput 的数据集的虚拟示例(首先是 df1,其次是 df2):
structure(list(OUTLETID = c("11N", "12B", "17C",
"44O"), CODE = c(4623,
4623, 4111, 4343),
PRICE = c(1.45, 1.45, 5.45, 5.03), LABEL = c("PRIV", "PRIV", "NON PRIV", "NON PRIV")),
row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
structure(list(CODE = c(4623, 4205, 4551),
PRICE = c(1.45, 1.17, 5.99), LABEL = c("PRIV", "PRIV", "NON PRIV")),
row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
因此,在本例中,应将 CODE=4205、PRICE=1.17 和 LABEL="PRIV" 的新行添加到 df1。与 df2 一样,没有 OUTLETID,在该列中应该只是 NA。这段代码应该适用于一般情况,更大的数据集,而不仅仅是这个小例子。
解决方案
由于您必须处理大型数据集,请在下面找到该软件包的解决方案data.table
:
library(data.table)
setDT(df1)
setDT(df2)
rbind(df1,df2[CODE %in% setdiff(df2$CODE, df1$CODE) & LABEL == "PRIV",], fill = TRUE)
#> OUTLETID CODE PRICE LABEL
#> 1: 11N 4623 1.45 PRIV
#> 2: 12B 4623 1.45 PRIV
#> 3: 17C 4111 5.45 NON PRIV
#> 4: 44O 4343 5.03 NON PRIV
#> 5: <NA> 4205 1.17 PRIV
我不清楚您是否想从df1
. 因此,如果您想同时删除带有“NON PRIV”标签的行,df1
可以使用以下代码行:
rbind(df1[LABEL == "PRIV"],df2[CODE %in% setdiff(df2$CODE, df1$CODE) & LABEL == "PRIV",], fill = TRUE)
#> OUTLETID CODE PRICE LABEL
#> 1: 11N 4623 1.45 PRIV
#> 2: 12B 4623 1.45 PRIV
#> 3: <NA> 4205 1.17 PRIV
由reprex 包(v0.3.0)于 2021 年 10 月 26 日创建
推荐阅读
- python - 在 Flask 应用程序中使用的 RadioField Wtforms 的自定义小部件未设置已检查
- python - Python - 将科学记数法转换为使用前缀的函数(例如,毫、微)
- .net - 正则表达式用逗号分隔,不在括号内(.NET)
- mysql - 在 Google DataStudio 上访问 Google Cloud VM (mysql)
- bash - Bash - 从特定字符串开始删除文件的全部内容
- jquery - $(window).scroll() 监听器中的逻辑只更改一次值。从不按预期每次增加
- r - 如何删除 R 中文件名的最后 n 个字符以创建变量?
- reactjs - 如何使用
在 componentDidMount 上? - swift - 扩展的私有限定符产生文件私有行为
- database - 使用 Timer 从 firebase 数据库中检索数据