【问题标题】:frequency of elements in a data frame数据框中元素的频率
【发布时间】:2014-02-05 15:59:30
【问题描述】:

我有以下数据框(这是一个示例,数据框可以包含更多列)

SelectVar 
     a    b    c    l    p    v   aa   ff
1 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxb2 Dxb2 Dxb2
2 Dxb2 Dxb2 Dxb2 Dxd2 Dxi2 Dxc2 Dxd2 Dxi2
3 Dxc2 Dxd2 Dxi2 Dxi2 tneg Dxd2 Dxi2 tneg

我想计算元素的频率,但不将其转换为向量并使用表格或通过指示元素,如

length(SelectVar[SelectVar=="Dxa2"])

除了上一段中提到的示例数据帧之外,还有其他方法可以计算元素的频率吗?

【问题讨论】:

  • table 有什么问题?
  • 你的最终目标是什么?如果您能解释您将如何处理频率计数,我们或许可以提出不同的方法。
  • 我像上面一样生成重复的数据框,其中列名可以是不同的、更长或更短的所有三行。我不想每次都必须操作数据,因为我想将三个最常见的元素链接到另一个表达式。在创建一个表使用的向量时,我每次都必须操作数据,因为元素和列名可能不同
  • 构造一个简单的函数对您在评论中描述的内容没有帮助吗?像f = function(mydf) sort(table(unlist(mydf))) 这样的东西。而且,也许您可​​以以某种方式将所有数据框放在一个列表中并使用lapply 操作它们?
  • 出于好奇,为什么要使用data.frame?如果列都包含相同的数据类型,matrix 似乎更合适,也许更容易操作。

标签: r dataframe


【解决方案1】:

我想你昨天问了同样的问题,Counting the frequency of an element in a data frame

answer 修改自 dickoa 对上一个问题的回答 而不是data.frame,如果你把它设为矩阵,table() 不需要矢量化,它应该可以工作。

df <- read.table(text = "   b    c    e    f    g    h    j 
1 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2
2 Dxb2 Dxb2 Dxb2 Dxb2 Dxc2 Dxc2 Dxc2
3 Dxd2 Dxi2 tneg tpos Dxd2 Dxi2 tneg", header = TRUE, row.names = 1)

ll<-data.frame(table(as.matrix(df)))

现在,您可以按freq 排序并选择前3 名

head(ll[order(ll$Freq, decreasing=T),],3)               

【讨论】:

  • 我没有意识到通过转换成矩阵可以让工作变得更容易,谢谢
猜你喜欢
  • 2014-03-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多