我有一个如下所示的数据框:
CEMETERY CONTEXT SEX BONE MEASUREMENT VALUE
1 Medieval-St. Mary Graces 6225 MALE HuE1 L 64.1
2 Medieval-St. Mary Graces 6225 MALE HuE1 R 62.7
3 Medieval-St. Mary Graces 6225 MALE HuHD L 50.1
4 Medieval-St. Mary Graces 6225 MALE HuHD R 51.3
5 Medieval-St. Mary Graces 6225 MALE HuL1 R 346.0
6 Medieval-St. Mary Graces 6272 FEMALE HuHD L 41.3
我需要移除任何只有左(L)或(R)骨测量的样本(上下文),而不是两者都有(例如,如果样本有HuE1L而不是HuE1R那么我需要将其删除) 。我不确定最好的方法是什么,因为数据框太大而无法单独删除某些行。为了创建这个数据框,我使用了merge()函数,所以我也有每个骨骼的数据框(左边和右边都在不同的数据框中),如果这对我需要做的事情有什么不同呢?
编辑: 我尝试使用data.table:
library(data.table)
setDT(df)
setkey(df, CONTEXT, BONE)
df[df[, .N, key(df)][N == 2, .(CONTEXT, BONE)]]
但是这会返回:
CEMETERY CONTEXT SEX EXPANSION VALUE
1: Medieval-Spital Square 19 FEMALE HuE1 L 57.9
2: Medieval-Spital Square 19 FEMALE HuE1 R 58.8
3: Medieval-Spital Square 19 FEMALE HuHD R 44.6
4: Medieval-Spital Square 19 FEMALE HuL1 L 326.0
5: Medieval-Spital Square 19 FEMALE HuL1 R 332.0
474: Medieval-St. Mary Graces 16332 MALE RaHD L 25.4
475: Medieval-St. Mary Graces 16344 MALE HuHD R 48.8
476: Medieval-St. Mary Graces 20001 FEMALE HuHD L 40.2
477: Medieval-St. Mary Graces 20001 FEMALE HuHD R 39.8
478: Medieval-St. Mary Graces 20001 FEMALE RaHD R 20.8
所以它实际上没有删除只有左或右的骨骼测量值。 澄清一下 - Ls和Rs是列&EXPANION'列的一部分,而不是一个单独的列 - 我首先需要自己制作一个列/我将如何进行此操作?
答案 0 :(得分:1)
您可以使用data.table
:
library(data.table)
setDT(df)
setkey(df, CONTEXT, BONE)
df[df[, .N, key(df)][N == 2, .(CONTEXT, BONE)]]
# CEMETERY CONTEXT SEX BONE MEASUREMENT VALUE
# 1: Medieval-St. Mary Graces 6225 MALE HuE1 L 64.1
# 2: Medieval-St. Mary Graces 6225 MALE HuE1 R 62.7
# 3: Medieval-St. Mary Graces 6225 MALE HuHD L 50.1
# 4: Medieval-St. Mary Graces 6225 MALE HuHD R 51.3
说明:
data.table
(setDT()
)setkey()
)。我们希望按setkey(df, CONTEXT, BONE)
和CONTEXT
BONE
key
(df[, .N, key(df)]
)2
次出现的子集数据(N == 2
)