![](/img/trans.png)
[英]How to keep all rows of one group if two specified values are present in one column in data.frame in R
[英]keep values of a data frame column R
在我的数据帧df
我想获得满足以下条件的id
号:A的值大于B的值。在示例中,我只希望Id = 2。
Id Name Value
1 A 3
1 B 5
1 C 4
2 A 7
2 B 6
2 C 8
vecA<-vector();
vecB<-vector();
vecId<-vector();
i<-1
while(i<=length(dim(df)[1]){
if(df$Name[[i]]=="A"){vecA<-c(vecA,df$Value)}
if(df$Name[[i]]=="B"){vecB<-c(vecB,df$Value)}
if(vecA[i]>vecB[i]){vecId<-c(vecId,)}
i<-i+1
}
首先,您可以将数据从长到宽转换,因此每个ID都有一行:
library(reshape2)
(wide <- dcast(df, Id~Name, value.var="Value"))
# Id A B C
# 1 1 3 5 4
# 2 2 7 6 8
现在,您可以使用普通索引来获得A大于B的ID:
wide$Id[wide$A > wide$B]
# [1] 2
当然,第一个答案很好。 我也想进行常规的子集操作。 我想到了这个,因为您可能想查看一些最新的R软件包。 如果您有3个小组进行比较,那将很有趣。 哦,下面EXP的代码是你开始的确切data.frame。
library(plyr)
library(dplyr)
comp <- exp %>% filter(Name %in% c("A","B")) %>% group_by(Id) %>% filter(min_rank(Value)>1)
# If the whole row is needed
comp[which.max(comp$Value),]
# If not
comp[which.max(comp$Value),"Id"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.