r - 具有 2 个条件的子集不适用于哪个功能

标签 r conditional subset

我一直试图在 Stackoverflow 上找到类似的问题,但所有类似的问题仍然无法回答我的问题或解决此问题。

我有这个数据集,使用 which() 和其他函数,我试图找到两个条件都为真的 id。但是,我不知道如何让它在 R 中工作。它要么返回所有 id,要么返回我迄今为止尝试过的空向量。

因此,我仅针对这个问题从数据中抽取了 20 个观察值(实际数据框很大),以生成一个模拟样本来传达我的问题并在 Stackoverflow 上解决它,但我会尝试。

我有这个数据框,我想要严格包含附件 V 和附件 R 的 ID。

df
          id attachment 
271  1000534          V      
372  1000547          V      
1012 1000530          R      
1568 1000539          R     
1095 1000530          R      
185  1000534          V      
1476 1000539          R      
903  1000530          R      
309  1000547          V      
1010 1000530          R      
333  1000547          V      
1094 1000530          R      
1334 1000539          R      
340  1000547          V      
730  1000530          R      
22   1000067          V     
1308 1000533          R      
799  1000530          R      
138  1000533          V      
1161 1000530          R      

所以,正如我们所见,id 1000533 同时具有 V 和 R,所以我想要捕获的 id 两者兼有,我尝试了以下选项:

VR <- df[(df$attachment == 'V') & (df$attachment == 'R'),]
VR <- df[(df$attachment == 'V') && (df$attachment == 'R'),]
VR <- df[which(df$attachment == 'V') && which(df$attachment == 'R'),]
VR <- df[which(df$attachment == 'V') & which(df$attachment == 'R'),]

但它们返回一个包含所有 20 个值的数据框。当我打电话时

unique(VR$id)

它从初始数据帧返回所有 id。使用我的实际数据,它会返回一个空数据框,具体取决于我尝试了上述哪种子集尝试,但它永远不会返回我想要的 - 一个只有包含附件 V 和附件 R 的 id(或观察值)的数据框。

我做错了什么以及如何仅提取同时具有 V 和 R 的那些 id?

最佳答案

由于每个观察只有一个“依恋”级别,因此不可能同时拥有 V 和 R。

由于 ID 在观察中重复,您可以使用 intersect 来实现您想要做的事情:

myIds <- intersect(df$id[df$attachment == "V"], df$id[df$attachment == "R"])

现在 myIds 将存储同时具有 V 和 R 的 id。

myIds
[1] 1000533

在示例中是单个 id。


如果你想要只有 V 附件而不是 R 附件的观察,你可以使用 setdiff 而不是 intersect:

myIds <- setdiff(df$id[df$attachment == "V"], df$id[df$attachment == "R"])

这里要注意的一点是 intersect 是可交换的,因此输入参数的顺序无关紧要。对于 setdiff,顺序很重要。您可以将顺序读取为参数 1 中不在参数 2 中的元素。

关于r - 具有 2 个条件的子集不适用于哪个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410939/

相关文章:

r - 如何从拟合 R 中的线性 b 样条回归中提取潜在系数?

r - 自动生成命令以重现工作区中的对象

r - 如何根据另一个数据框的值删除数据框中的行

JavaScript 告诉哪个条件被击中

r - 按因子水平划分的子设置观测值超过 x 个观测值

R 中 readr 包中的 read_table()

python pandas 跨列条件计数

c++ - 在 C++ 中的条件或控制语句中声明和初始化变量

arrays - 在 Go 中使用 slice 进行子集检查

algorithm - 用给定的总和计算最小子集