【问题标题】:R: Removing fraction of binary elements in vectorR:删除向量中二进制元素的一部分
【发布时间】:2012-07-09 12:33:09
【问题描述】:

想象一下,你有一个像

这样的向量
a <- c(0,0,0,1,1,1)

然后是另一个向量

b <- c(0,1,1)

如何从向量“a”中删除“b”向量元素?

输出应该是这样的:

a (0,0,1) 

【问题讨论】:

  • 我怀疑在通信理论中有一个答案。很可能有一个基于b 的多项式(类似于校验和和前向纠错多项式),可用于非常快速地扫描a。不幸的是,我在这方面的知识非常有限。
  • 我的也是....但如果它能激励任何人就太好了
  • 刚刚想到,把两个向量都改成频率表会不会更容易减去?
  • 好的,我认为它是这样工作的:a
  • 你不需要 as.data.frame 或其中的选择,但你在正确的轨道上......刚刚注意到你的评论,看看我的回答

标签: r vector subtraction


【解决方案1】:

有趣的问题:

一种天真的方法是

test<-gsub(paste(b,collapse="~"),"",paste(a,collapse="~"))
test<-gsub("~~","~",test)
test<-as.numeric(unlist(strsplit(test,"~")))

编辑:

例如,您可以更改采样方法

idx <- sample(length(a))

如果你想取一个大小为 3 的样本

a.sample<-a[idx[1:3]]
a.leftover<-a[-idx[1:3]]

在这种情况下b&lt;-idx[1:3]

【讨论】:

  • 感谢您帮助我(狡猾的想法),但是,您的解决方案似乎适用于我的“0”和“1”排列整齐的情况。当我尝试 vector b as b
  • 我期待“减法”c(1,0,1) 的输出与“减法”c(0,1,1) 相同。出于某种原因,当我交换向量“b”中元素的顺序时,它无法计算答案。我担心的原因是我的向量“b”是“0”和“1”的随机链(未排列)。我想从向量“a”中抽取随机样本来创建向量“b”,然后从向量“a”中抽取元素进行进一步采样。这就像没有更换的采样,但我想获得许多不同大小的样本。谢谢!
  • 太棒了,可以!谢谢!
【解决方案2】:

我最初解释为 ttmaccer,但现在我看到你的 cmets 你的问题要简单得多。您只想通过 B 中的项目减少 A 中的项目数量,并且顺序无关紧要。

at <- table(a)
b2 <- c(b, 0, 1) #in case b contains no 1s or 0s
bt <- table(b2) - c(1,1)
abt <- at - bt
rep(0:1, abt)

【讨论】:

  • 谢谢!比我的好看。
  • 刚刚意识到当向量“b”根本没有“0”或“1”时这个解决方案不起作用。然后表格比由向量“a”制成的表格更短,并且不能减去这些。任何想法如何绕过它?
  • 也可以试试tabulate,虽然你必须把它设为 1 和 2。
猜你喜欢
  • 2011-04-14
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多