R中具有不同类的条件var计数

时间:2016-07-25 20:15:27

标签: r

我有一个看起来像这样的数据框:

class    ID  rank
a        AA  win
b        AA  win
b        AB  win
c        BB  win
d        AB  win
e        BB  win
e        AA  win

我如何才能最有效地计算每winsID edf.write.mode(SaveMode.Overwrite).save("/root/path/to/data/partition_col=value") 类的条件低于sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false") (不包括在内)?

3 个答案:

答案 0 :(得分:2)

也许这一个:

aggregate(rank~ID, df[as.character(df$class)<"e",], length)

# ID rank
#1 AA    2
#2 AB    2
#3 BB    1

至于@Richard Scriven在评论中指出的内容(感谢你):

  

字符向量中字符串的比较是使用正在使用的语言环境的整理顺序在字符串中进行词典编排

如果我们运行Sys.getlocale(),我们会得到:

[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United 
    States.1252;LC_MONETARY=English_United
    States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

我们可以使用以下内容设置区域设置:

Sys.getlocale("LC_TIME") #LC_TIME for example

有关详细信息,请参阅?locales

答案 1 :(得分:0)

dplyr解决方案:

library(dplyr)
df%>% group_by(ID) %>% filter(class !="e") %>%summarize(n())

答案 2 :(得分:0)

我们也可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),按'ID'分组,使用逻辑表达式i指定class != "e"并获取行(.N)。

library(data.table)
setDT(df)[class != "e",.(N = .N), by = ID]
#   ID N
#1: AA 2
#2: AB 2
#3: BB 1