【问题标题】:Remove columns on the condition of sum in R删除 R 中求和条件下的列
【发布时间】:2016-11-02 23:28:25
【问题描述】:

我正在尝试制作垃圾邮件预测器。我有话要说。

我得到了矩阵,其中列是邮件中出现的单词,结果是垃圾邮件/非垃圾邮件,例如

例子:-

mail thing money dollar spam
0     1     1     1     1
1     0     0     1     0
0     0     1     1     1

等等。 此处的“垃圾邮件”列表示邮件是否为垃圾邮件。

我应该如何删除列总和(仅当垃圾邮件为 0 时)小于特定值(比如说 x)的列?

这样我可以删除检测垃圾邮件根本不需要的术语。

感谢您的帮助!

【问题讨论】:

  • your_matrix[, colSums(your_matrix * your_matrix[, 5]) >= x]
  • 然而,这是一种非常糟糕的变量选择方法。任何与垃圾邮件相反相关的内容都有信息,但会被删除。

标签: r multiple-columns


【解决方案1】:
set.seed(1)

mydata <- data.frame(A = sample(0:1, 10, T),
                     B = sample(0:1, 10, T),
                     C = sample(0:1, 10, T),
                     D = sample(0:1, 10, T),
                     spam = sample(0:1, 10, T))

##    A B C D spam
## 1  0 0 1 0    1
## 2  0 0 0 1    1
## 3  1 1 1 0    1
## 4  1 0 0 0    1
## 5  0 1 0 1    1
## 6  1 0 0 1    1
## 7  1 1 0 1    0
## 8  1 1 0 0    0
## 9  1 0 1 1    1
## 10 0 1 0 0    1


mydata_ones <- mydata [ mydata[, ncol(mydata)] == 0, ]

colSums(mydata_ones)

## A    B    C    D spam 
## 2    2    0    1    0 

cbind(mydata[, -ncol(mydata)] [, colSums(mydata_ones) >= 2 ], 
      spam = mydata[, ncol(mydata)])

##    A B spam
## 1  0 0    1
## 2  0 0    1
## 3  1 1    1
## 4  1 0    1
## 5  0 1    1
## 6  1 0    1
## 7  1 1    0
## 8  1 1    0
## 9  1 0    1
## 10 0 1    1

【讨论】:

  • 我猜它需要列的整体平均值。我只想获得垃圾邮件为 1 的值的列的平均值。
  • 对不起,我读到了mean,而不是sum。所以你想保留总和不小于 x 的列。我会编辑。
  • 是的。并且仅当垃圾邮件值为 1 时才求和
  • 我没有得到你想要的更多信息,因为你在问题中没有说比我做的更多的事情。
  • 好吧,我想我明白了。只有当它们对应于垃圾邮件列中的 1 时,您才希望对每列中的 1 求和
猜你喜欢
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2023-04-10
  • 2019-06-05
相关资源
最近更新 更多