Манипуляция циклом For-If в R - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь скопировать очень простой код VBA на R, чтобы идентифицировать дубликаты. Моя цель состоит в том, чтобы определить, сколько наборов дубликатов в наборе образцов, сначала читая по строкам, а затем читая по столбцам. Итак, я придумал этот образец:

x<-matrix(data=c("Ali","Ali","Abu","Ali","Ahmad","siti","Ali","Abu", "Ahmad", "Ali", "Abu", "Aisyah", "Khalid", "Robin","Ahmad","Ali","JOrdan","siti"), nrow=6)
x<-data.frame(x)

colnames(x)<-c("nama1","nama2","nama3")

чтобы вы получили что-то вроде этого

 nama1  nama2  nama3
1   Ali    Ali Khalid
2   Ali    Abu  Robin
3   Abu  Ahmad  Ahmad
4   Ali    Ali    Ali
5 Ahmad    Abu JOrdan
6  siti Aisyah   siti

Так что я хочу сделать по существу:

c<-0
for (i in x){
    if (x[i,1]==x[i+1,1]){
        c=c+1
        }
    print c
    }

Последний вывод, который я хочу, - указать, сколько дубликатов в каждой строке, а затем сделать это по столбцу ... как

 for i=1 to 10
 for j=1 to 20
        cells(i,j)="XXX"
        do this
 next j
 next i

Проблема в том, что я не знаю, как указать отдельную ячейку в R, например. в VBA вы можете делать ячейки (i + 1,1) = ячейки (i, 1) .. и я учусь делать очень простые манипуляции с данными в R.

Я хотел бы суммировать значение c для всех столбцов в конце. Так было бы 4 + 4 + 6 = 14.

Любой совет приветствуется! Спасибо

1 Ответ

1 голос
/ 08 июня 2019
#row total number of duplicates
apply(x, 1, function(x) length( x[ duplicated(x) ] ) )
#[1] 1 0 1 2 0 1

#column total number of duplicates
apply(x, 2, function(x) length( x[ duplicated(x) ] ) )
#nama1 nama2 nama3 
#    2     2     0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...