根据2种不同的条件使用R计数列

时间:2018-01-31 14:53:36

标签: r dataset conditional-statements counting

为了序言,我对R和它的能力相对较新,并且已经在这个问题上苦苦挣扎了大约2周。我有一个相当大的数据集,有2列电子邮件和状态。它显示如下:

runfile('C:/Users/Lenovo/Desktop/EE Codes/Knn with prima.py', wdir='C:/Users/Lenovo/Desktop/EE Codes')
[[91 10]
 [30 23]]
0.53488372093
0.74025974026
0.6558441558441559
[1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0
 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0
 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1
 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0
 0 0 0 0 0 0]
661    1
122    0
113    1
14     1
529    0
103    0
338    1
588    0
395    0
204    0
31     0
546    0
278    0
593    0
737    0
202    0
175    0
55     1
479    1
365    1
417    0
577    0
172    0
352    0
27     0
605    1
239    0
744    0
79     0
496    0
      ..
413    1
694    1
698    0
386    1
456    0
728    0
71     1
49     0
210    0
409    0
503    0
37     1
687    0
48     0
261    0
653    0
331    1
568    1
196    1
76     0
64     0
671    0
52     1
310    0
416    1
476    0
482    0
230    1
527    0
380    0
Name: 1, Length: 154, dtype: int64

我需要获取已更改状态的电子邮件的计数以及具有相同状态的电子邮件的计数。所以:

Email        Status
fake@123     Subscribed
real@123     Subscribed
fake@123     Unsubscribed
real@123     Subscribed

我在R中尝试了各种不同的东西,例如子集,if语句,循环,反连接,合并,似乎没有任何工作。如果有人能对这个问题有所了解,我将非常感激。提前感谢您的帮助,我希望我能清楚地解释我的情况。

1 个答案:

答案 0 :(得分:0)

    x <- x[order(x[,1]),]
    email <- x[1,1]
    subscribe <- x[1,2]
    same_count <- 0
    change_count <- 0

    for(i in 2:nrow(x)){
      if(email == x[i,1] && subscribe == x[i,2]) { same_count <- same_count + 1}
      if(email == x[i,1] && subscribe != x[i,2]) { change_count <- change_count + 1}
      email <- x[i,1]
      subscribe <- x[i,2]
    }