【问题标题】:Extract rows in first data.frame for which certain values are not found in second data.frame在第一个 data.frame 中提取在第二个 data.frame 中找不到某些值的行
【发布时间】:2013-04-12 03:16:48
【问题描述】:

我正在尝试从第一个数据帧中消除第二个数据帧中具有特定值的所有行。

使用 R 编程语言进行统计数据分析。

这是我在这里发布的第一个问题,请多多包涵;)

我处理机密数据,所以我用一个例子重现了这个问题。

Name=c("Bussieres", "Nelson")
Fname=c("Paul", "Robert")
Tel=c(123,234)
comp1=data.frame(Name, Fname, Tel)

Name=c("Bussieres","Bussieres","Nelson","Nelson")
Fname=c("Robert","Paul","Paul","Paula")
Tel=c(123,234,345,456)
comp2=data.frame(Name, Fname, Tel)

comp1 返回:

   Name Fname Tel
1 Bussieres   Paul 123
2    Nelson Robert 234

comp2 返回:

   Name Fname Tel
1 Bussieres Robert 123
2 Bussieres   Paul 234
3    Nelson   Paul 345
4    Nelson  Paula 456

现在,我想要返回 comp1 中“Name”和“Fname”在 comp2 中不相同的行。

要存储在新数据帧 comp3 中的预期回报将是(在此处进行了轻微编辑,发布了错误的预期结果):

   Name Fname Tel
1    Nelson Robert 234

我的第一次尝试是使用匹配功能,但效果不佳。

下面的 for 循环尝试也没有成功。

for (i in comp1[,"Name"]){for (j in comp3[,"Name"]){if i!=j return comp3=x1["Name"==i,]}}

我很惊讶我在 R 中找不到基本(原始)函数来执行此操作,因为从数据集中排除某些观察结果将是一个非常常规的过程。

【问题讨论】:

标签: r dataframe


【解决方案1】:

data.table 解决方案:

require(data.table)
dt1 <- data.table(comp1, key=c("Name", "Fname"))
dt2 <- data.table(comp2, key=c("Name", "Fname"))
dt1[!dt2]

#      Name  Fname Tel
# 1: Nelson Robert 234

【讨论】:

  • 对不起,我的意思不同,所以我会更正问题中的输出。
  • 阿伦提出的答案奏效了。谢谢!我安装了 data.table 包,然后运行上面的脚本。为了消除数据收集中的所有错误,我还将 Name 和 Fname 值大写。但是我是通过 Excel 完成的,所以我会在其他时间寻找 R 中的解决方案来解决这个问题;)
猜你喜欢
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2011-08-16
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多