我有一个6449x743
的数据框,其中几行重复两次,具有相同的column_X
和column_Y
值,但第二次重复的column_Z
值更高同一排。我想只保留较高column_Z
行。
我尝试过关注,但这并没有消除重复的值,只给出了6449x743
的输出。
output <- unique(Data[,c('column_X', 'column_Y', max('column_Z'))])
理想情况下,输出应为(6449 - N)x743
,因为行数会更少,但列数将保持不变,因为column_X
和column_Y
在过滤数据后将变得唯一在column_Z
。
如果有人有任何建议,请告诉我。感谢。
答案 0 :(得分:2)
您可以在特定列上使用不复制(!duplicated
)选项fromLast = TRUE
,如下所示:
df <- data.frame(a=c(1,1,2,3,4),b=c(2,2,3,4,5),c=1:5)
df <- df[order(df$c),] #make sure the data is sorted.
a b c
1 1 2 1
2 1 2 2
3 2 3 3
4 3 4 4
5 4 5 5
df[!duplicated(df$a,fromLast = TRUE) & !duplicated(df$b,fromLast = TRUE),]
a b c
2 1 2 2
3 2 3 3
4 3 4 4
5 4 5 5
答案 1 :(得分:2)
尝试
library(dplyr)
Data %>%
group_by(column_x, column_Y) %>%
filter(Z==max(column_Z))
它适用于样本数据
set.seed(13)
df<-data_frame(a=sample(1:4, 50, rep=T),
b=sample(1:3, 50, rep=T),
x=runif(50), y=rnorm(50))
df %>% group_by(a,b) %>% filter(x==max(x))
答案 2 :(得分:0)
这是一个较旧的答案,可能试图完成与你相同的事情:
How to make a unique in R by column A and keep the row with maximum value in column B
使用相关代码进行编辑:
使用包data.table:
的解决方案set.seed(42)
dat <- data.frame(A=c('a','a','a','b','b'),B=c(1,2,3,5,200),C=rnorm(5))
library(data.table)
dat <- as.data.table(dat)
dat[,.SD[which.max(B)],by=A]
A B C
1: a 3 0.3631284
2: b 200 0.4042683
答案 3 :(得分:0)
最简单的方法可能是通过column_Z订购整个内容然后删除重复项:
var stressValues = [ { angeredoutsidecontrol: 1, sadness: 3 }, { difficultiespileup: 2 } ];
var angerIndex = stressValues.findIndex((value) => Object.keys(value).includes('angeredoutsidecontrol'));
console.log(angerIndex);
假设我理解正确。