基于具有重复行的两列计算唯一值,R 数据框

Sha*_*ang 2 r count dataframe data.table

我有一个具有以下格式的 R 数据框:

column1    column2
NA         NA
1          A
1          A
1          A
NA         NA
NA         NA
2          B
2          B
NA         NA
NA         NA
3          A
3          A
3          A

df = structure(list(column1 = c(NA, 1L, 1L, 1L, NA, NA, 2L, 2L, NA, 
NA, 3L, 3L, 3L), column2 = c(NA, "A", "A", "A", NA, NA, "B", 
"B", NA, NA, "A", "A", "A")), .Names = c("column1", "column2"
), row.names = c(NA, -13L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

如果一列中的行具有NA,则另一列也具有NA。中的数值column1描述了一个唯一的组,例如第2-4行有组1。该列column2描述了该分组的标识。在此数据框中,标识为ABCD

我的目标是统计整个数据框中按组划分的身份数量:有多少个 A 组,有多少个 B 组等。

该文件的正确输出(到目前为止)是有 2 个 A 组和 1 个 B 组。

我该如何计算这个?

目前,我会尝试这样的事情:

length(df[df$column2 == "B"]) ## outputs 2 
Run Code Online (Sandbox Code Playgroud)

但这是不正确的。如果我组合column1column2,只取唯一值 1A、2B、3A,我想我可以计算出每个标签出现了多少次column2

(如果更容易,我很乐意用于data.table此任务。)

Fra*_*ank 5

您可以用于rle运行和table制表:

table(rle(df$column2)$values)

# A B 
# 2 1 
Run Code Online (Sandbox Code Playgroud)

详情请参阅?rle和。?table

或者,如果您想利用column1(源自column2):

table(unique(df)$column2)
Run Code Online (Sandbox Code Playgroud)