r - 嵌套 for 循环,在 R 中不同
问题描述
d3:
Col1 Col2
PBR569 23
PBR565 22
PBR565 22
PBR565 22
我正在使用这个循环:
for ( i in 1:(nrow (d3)-1) ){
for (j in (i+1):nrow(d3)) {
if(c(i) == c(j)) {
print(c(j))
# d4 <- subset.data.frame(c(j))
}
}
}
我想比较 Col1 中的所有行并消除不一样的行。然后我想输出一个数据框,其中只有在 col1 中具有相同值的数据框。
预期输出:
Col1 Col2
PBR565 22
PBR565 22
PBR565 22
不确定我的嵌套循环怎么了?是因为我没有指定列名吗?
解决方案
OP 已要求比较其中的所有行Col1
并消除不相同的行。
如果我理解正确,OP 希望删除其中值Col1
仅出现一次的所有行,并仅保留值出现两次或更多次的那些行。
这可以通过在 中查找重复值来完成Col1
。该duplicated()
函数将值的第二次和后续出现标记为重复。因此,我们需要向前和向后扫描,并结合两个结果:
d3[duplicated(d3$Col1) | duplicated(d3$Col1, fromLast = TRUE), ]
Col1 Col2 2 PBR565 22 3 PBR565 22 4 PBR565 22
同样可以通过使用Ryantable()
建议的函数计算出现次数来实现。在这里,计数被过滤以仅保留那些出现两次或多次的条目。
t <- table(d3$Col1)
d3[d3$Col1 %in% names(t)[t >= 2], ]
请注意,这与Ryan 的解决方案不同,后者仅保留值最常出现的行。即使在平局的情况下,也只会选择一个值。(对于给定的小样本数据集,两种方法都返回相同的结果。)
瑞恩的答案可以用更简洁的方式重写
d3[d3$Col1 == names(which.max(t)), ]
数据
d3 <- data.table::fread(
"Col1 Col2
PBR569 23
PBR565 22
PBR565 22
PBR565 22", data.table = FALSE)
推荐阅读
- node.js - Github 中的 Firebase creditentials.json 文件?
- python - 之后无法在本地运行 PySpark 代码
- python - 如何在以元组为键的字典上使用具有默认值的 get 函数?
- javascript - Leafletjs 地图缓存
- conv-neural-network - 我已经看到许多 CNN 使用许多过滤器,例如这些 [8,16,32,64,128,256,512] 等。有人可以解释为什么选择这些吗?
- azure - 将 Azure Pipeline 配置为从 Github 托管存储库中提取
- nestjs - 使用nestjs有条件地禁用控制器端点并使用配置服务中的值删除导出
- javascript - 跟踪给定的打印数量命令
- javascript - 用于多个用户输入的表单验证的 JavaScript
- vba - 在列中找到正确的重复值并根据 2 个标准(值和日期)剪切粘贴发现重复的行