繁体   English   中英

保留数据框列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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM