我目前有一个看起来像这样的数据框:
{
"xAxis": [
{ "id": "1", "label": "Dave" },
{ "id": "2", "label": "Laura" }
],
"yAxis": [
{ "id": "1", "label": "Happy" },
{ "id": "2", "label": "Sad" }
],
"options": {
"maxRowSelections": "1",
"lockRowOnMaxSelections": "false"
}
}
如果有重复值,我要删除整个ID组。所以我想要的输出是这样:
ID val
1 1 a
2 1 b
3 2 a
4 2 b
5 2 b
6 3 c
7 3 a
8 4 a
9 5 a
10 5 b
我遇到了删除单个行而不删除大块数据的解决方案。我会为此使用循环吗?
答案 0 :(得分:0)
使用dplyr
,我们可以group_by
ID
并选择组,如果该组中没有重复项。
library(dplyr)
df %>%
group_by(ID) %>%
filter(!any(duplicated(val)))
# ID val
# <int> <fct>
#1 1 a
#2 1 b
#3 3 c
#4 3 a
#5 4 a
#6 5 a
#7 5 b
或使用基数R ave
df[!with(df, as.logical(ave(val, ID, FUN = function(x) any(duplicated(x))))), ]
答案 1 :(得分:0)
在基数R中,
df[!df$ID %in% unique(df$ID[duplicated(df)]),]
# ID val
#1 1 a
#2 1 b
#6 3 c
#7 3 a
#8 4 a
#9 5 a
#10 5 b
答案 2 :(得分:0)
这是另一种base R
方法,该方法将table
与rowSums
一起使用以标识要保留的“ ID”
df[df$ID %in% names(which(!rowSums(table(df) > 1))),]
# ID val
#1 1 a
#2 1 b
#6 3 c
#7 3 a
#8 4 a
#9 5 a
#10 5 b