【问题标题】:Subsetting / unmerging data frames in R based on a variable基于变量的R中的子集/取消合并数据帧
【发布时间】:2015-02-14 00:32:04
【问题描述】:

我在 R 中有两个数据框。

one <- data.frame( x = letters[1:10] , y = 1:10, z = rnorm(10))    
two <- data.frame( x = letters[1:20] , y = 1:20, z = one$z)

我想根据变量 x “取消合并”这些数据帧...我的意思是...我想创建第三个数据帧,其中包含来自 two 的所有记录在数据框one不是。所以我想查看two 并说“删除此数据框中的所有行,这些行也恰好在one 中。这有意义吗?任何帮助将不胜感激!

【问题讨论】:

  • 你的意思是anti_join(two, one) 使用dplyr

标签: r merge dataframe subset


【解决方案1】:

基础 R 中的一种解决方案:

#using as.character since one$x and two$x are factors in this case
> two[ as.character(one$x) != as.character(two$x), ]
   x  y          z
11 k 11 -0.6680130
12 l 12 -1.0501888
13 m 13 -1.0987269
14 n 14  1.0045557
15 o 15 -0.6002310
16 p 16  1.3162201
17 q 17 -0.1209575
18 r 18 -1.0129547
19 s 19  2.4832670
20 t 20  0.4660156

【讨论】:

  • 再次感谢!如果我处理的是因素而不是字符,那将如何更改代码?我尝试在我的数据集中使用as.factor,但被告知Error in Ops.factor(as.factor(one$EntrezUID), as.factor(two$EntrezUID)) : level sets of factors are different
  • 没错。由于您在数据集中使用因子,因此您需要将它们转换为字符,这就是我上面的代码在方括号内所做的。无需指定as.factor。你需要完全按原样使用我的代码,因为你使用了因子,所以代码根本不应该改变。
  • 如果您处理的是因子而不是字符,那么您仍然需要将它们转换为字符。 data.frame 中的实际类无论如何都不会改变。
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多