【问题标题】:Counting distinct values in column of a data frame in R计算R中数据框列中的不同值
【发布时间】:2016-05-10 09:28:41
【问题描述】:

所以我想计算一列的不同值。这是数据框:

asa
----
aa
bb
aa
aa
bb
cc
dd

想得到:

asa |  n
--------
aa  |  3
bb  |  2
cc  |  1
dd  |  1

我尝试使用来自 Counting unique / distinct values by group in a data frame 的 ddply 并执行此代码:(可重现)

asa<-c("aa","bb","aa","aa","bb","cc","dd")
asad<-data.frame(asa)
ddply(asad,~asa,summarise,n=length(unique(asa)))

但我得到了:

  asa n
1  aa 1
2  bb 1
3  cc 1
4  dd 1

它没有进行计算。请注意,列中的值可以随时添加。所以它并不总是“aa”、“bb”、“cc”和“dd”。也可以用空格或逗号分隔(“aa bb”、“aa,bb”或“aa, bb”)必须有办法做到这一点。提前谢谢你

【问题讨论】:

  • 试试这个:table(asa)
  • 我可以设置一个值为 aa 的 n 的变量吗?
  • 嗯?把它放在像asad &lt;- data.frame(table(asa))这样的data.frame中,并更改名称,例如names(asad)&lt;-c("asa", "n")
  • 您从其他解决方案中进行的简单复制/粘贴不起作用的原因是,在您的示例数据中,您正在计算分组所依据的同一个变量。因此,unique(asa) 产生长度为 1 的向量。您引用的帖子中的数据按名称分组,然后按另一个变量计数。因此,在您的情况下,只需删除 unique() 就可以了。

标签: r dataframe count plyr distinct-values


【解决方案1】:

我们可以使用table

setNames(as.data.frame(table(df1$asa)), c("asa", "n"))
#   asa    n
#1   aa    3
#2   bb    2
#3   cc    1
#4   dd    1

或与tally 来自dplyr

library(dplyr)
df1 %>%
     group_by(asa) %>% 
     tally()
#    asa     n
#   (chr) (int)
#1    aa     3
#2    bb     2
#3    cc     1
#4    dd     1

【讨论】:

  • 让我做 ss
  • @Elbert 你有什么疑问?
  • 或者,如果你喜欢data.tabledata.table(asa) %&gt;% .[, .N, by = "asa"]
【解决方案2】:

更简单,只需使用 as.data.frame 和 table 函数,无需其他参数。

as.data.frame(table(df$asa))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2019-08-19
    • 1970-01-01
    • 2017-12-04
    • 2021-02-19
    相关资源
    最近更新 更多