将R中矩阵中出现次数最少的字符串转换为出现次数更高的字符串

卢克354

我在每列中都有以下具有不同字符串的矩阵。一列中不同字符串的最小数量为2,有些列最多包含20个不同的字符串,有些列只有两个不同的字符串。我想将<=2每一列中以频率1或2(出现的字符串转换为频率更高(>2的字符串因此,在一个因素仅发生一次或两次的色谱柱中,应将其转换为同一色谱柱中频率更高的因素。如果下一个较高的频率(>2)出现两次,则只需取其中一个,哪一个都不重要。保留所有其他列不变。在每一列中,总有一个频率因子大于2。

我的示例矩阵是:

n.mat <- structure(c("M", "M", "M", "M", "M", "M", "Y", "Y", "M", "M", 
"Y", "Y", "F", "F", "F", "F", "M", "M", "X", "Y", "Y", "F", "F", 
"F", "A", "A", "A", "A", "A", "A", "A", "B", "A", "A", "A", "A", 
"A", "B", "B", "B", "C", "D", "D", "D", "E", "E", "E", "G"), .Dim = c(8L, 
6L), .Dimnames = list(c("r1", "r2", "r3", "r4", "r5", "r6", "r7", 
"r8"), NULL))

  [,1] [,2] [,3] [,4] [,5] [,6]
r1 "M"  "M"  "M"  "A"  "A"  "C" 
r2 "M"  "M"  "M"  "A"  "A"  "D" 
r3 "M"  "Y"  "X"  "A"  "A"  "D" 
r4 "M"  "Y"  "Y"  "A"  "A"  "D" 
r5 "M"  "F"  "Y"  "A"  "A"  "E" 
r6 "M"  "F"  "F"  "A"  "B"  "E" 
r7 "Y"  "F"  "F"  "A"  "B"  "E" 
r8 "Y"  "F"  "F"  "B"  "B"  "G" 

所需的输出:

n.mat <- structure(c("M", "M", "M", "M", "M", "M", "M", "M", "F", "F", 
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", 
"F", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "B", "B", "B", "D", "D", "D", "D", "E", "E", "E", "D"), .Dim = c(8L, 
6L), .Dimnames = list(c("r1", "r2", "r3", "r4", "r5", "r6", "r7", 
"r8"), NULL))

   [,1] [,2] [,3] [,4] [,5] [,6]
r1 "M"  "F"  "F"  "A"  "A"  "D" 
r2 "M"  "F"  "F"  "A"  "A"  "D" 
r3 "M"  "F"  "F"  "A"  "A"  "D" 
r4 "M"  "F"  "F"  "A"  "A"  "D" 
r5 "M"  "F"  "F"  "A"  "A"  "E" 
r6 "M"  "F"  "F"  "A"  "B"  "E" 
r7 "M"  "F"  "F"  "A"  "B"  "E" 
r8 "M"  "F"  "F"  "A"  "B"  "D" 

我可以通过此代码计算每一列中每个因子的频率,但是仍然缺少将字符串转换为频率更高的字符串的部分:

n.mat<-n.mat[, apply(n.mat, 2, function(x) sort(table(x), decreasing = TRUE)]
杰伊

尝试这个。

apply(n.mat, 2, function(x) {
  tx <- sort(table(x), decreasing=TRUE)
  x[x %in% names(tx[tx <=2])] <- names(rev(tx[names(tx[tx > 2])])[1])
  x
})
#   [,1] [,2] [,3] [,4] [,5] [,6]
# r1 "M"  "F"  "F"  "A"  "A"  "E" 
# r2 "M"  "F"  "F"  "A"  "A"  "D" 
# r3 "M"  "F"  "F"  "A"  "A"  "D" 
# r4 "M"  "F"  "F"  "A"  "A"  "D" 
# r5 "M"  "F"  "F"  "A"  "A"  "E" 
# r6 "M"  "F"  "F"  "A"  "B"  "E" 
# r7 "M"  "F"  "F"  "A"  "B"  "E" 
# r8 "M"  "F"  "F"  "A"  "B"  "E" 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将插入次数最少的字符串转换为回文

将字符串在 R 中的多个列中出现的次数制表

如何以最少的字符串去除次数将字符串转换为回文?

将字符串与出现次数连接

如何仅返回出现次数最少的字符串的ArrayList?

计算字符串中“(”的出现次数

计算字符串中字符串出现的次数

给定字符串中出现次数最多的词

如何计算Java字符串中出现序列的次数?

数数 字符串中出现char的次数

计算字符串在组列中出现的次数

Excel公式返回字符串在列中出现的次数

计算某些字符串在 Python 中出现的次数

如何检查字符串中每个子字符串中出现字符串的次数?

将字符串转换为具有出现次数的对象

字符串和子字符串以及子字符串在主字符串中出现的次数

如何使用Java中的map集合按字符串中出现的次数对字符进行排序?

计算流中字符串中字符的出现次数

如何查找子字符串在给定字符串(包括连接)中出现的次数?

如何计算字符串中出现字符串的次数(重叠)

包含一组中出现次数最多的字符串的最短字符串

计算Java字符串中字符出现的次数

计算字符串中字符的出现次数

计算字符串中特殊字符的出现次数

如何计算字符串中字符的出现次数

计算字符串末尾的出现次数

Tableau中子字符串的出现次数

计算复杂字符串的出现次数

如何计算字符串出现的次数