我的数据框'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
如何做到这一点?
答案 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