R计算列中另一列唯一的值

时间:2017-03-19 03:11:29

标签: r

我的数据框'df'喜欢

      user_id     value
1      t34        A
2      t34        A
3      t87        A
4      t55        B
5      t55        B
6      t76        B
7      t99        A

如果我这样做

table(df$value)

我得到了

 A    B
 4    3

但我只想为每个用户计算一次,例如

table(df$value WHERE user_id IS unique)

并获取

 A    B
 3    2

如何做到这一点?

3 个答案:

答案 0 :(得分:5)

您可以先获取唯一的行,然后制表。

table(unique(df)$value)
#
# A B 
# 3 2 

如果您有其他列,则可以先获取列子集,然后制表。

with(unique(df[c("user_id", "value")]), table(value))
# value
# A B 
# 3 2 

答案 1 :(得分:3)

以下是使用data.table

的选项
library(data.table)
unique(setDT(df))[, .N, value]
#   value N
#1:     A 3
#2:     B 2

tidyverse

library(dplyr)
distinct(df) %>% 
           count(value)
# A tibble: 2 × 2
#  value     n
#   <chr> <int>
#1     A     3
#2     B     2

答案 2 :(得分:1)

提交的解决方案都很完美。在这里,我想提供一种方法,使用基础R中的duplicated函数。duplicated函数可以确定哪些行是数据框中其他行的重复。它可以将数据帧作为输入参数并返回逻辑向量。

# Create the example data frame
df <- data.frame(user_id = c("t34", "t34", "t87", "t55", "t55", "t76", "t99"),
                 value = c("A", "A", "A", "B", "B", "B", "A"),
                 stringsAsFactors = FALSE)

# Use the duplicate function
uniq_df <- df[!duplicated(df), ]
# Count number of value in uniq_df
table(uniq_df$value)

A B 
3 2