2014-11-04 3 views
-1

Я написал этокак написать это в цикле for в R?

pp1<-table(sip$newSS4_1 [sip$newSS4_1==1], sip$HS1C1 [sip$newSS4_1==1]) 
pp1=round(prop.table(pp1,1), digits=3) 
pp1 

я есть 30 переменных, чтобы сделать. например:

pp2<-table(sip$newSS4_2 [sip$newSS4_2==1], sip$HS1C1 [sip$newSS4_2==1]) 
pp2=round(prop.table(pp2,1), digits=3) 
pp2 

и pp3 ... pp30 так далее. У меня есть newSS4_1 ... newSS4_30 в dataframe уже.

Как написать это в цикле?

Спасибо.

+0

Показать некоторые данные, чтобы сделать его воспроизводимым –

+0

Это основной вопрос программирования и не имеет ничего общего с каким-либо конкретным языком. –

+0

Прошу прощения. Я просто начинающий и пытаюсь очистить данные. Извините за немой вопрос, если это вас беспокоит. @ CarlWitthoft –

ответ

0

Кажется, что вы делаете все для себя.

  1. Вместо того, чтобы создавать 30 переменных с разными именами, почему бы не использовать один список?
  2. Вместо использования имен столбцов, почему бы не использовать номера столбцов?

pp <- list() colnums <- grep(names(sip), "newSS4_") # assuming they are in order for (i in 1:30) { cn <- colnums[i] pp[[i]] <- table(sip[,cn ] [sip[,cn]==i], sip$HS1C1 [ sip[,cn]==i ]) }

Если вы действительно хотите иметь различные переменные, вы можете использовать

assign(paste0("pp", i), value) 

назначить, например, pp1, pp2 и т. д.

+0

Спасибо за ваш ответ. Потому что я новичок. Я не понимаю, что вы подразумеваете под «использованием единого списка»? и я не использую имена строк. Я использую имена столбцов, и да, я могу использовать номера столбцов. Это просто я не знаю, как это сделать ... @ dash2 –

+0

Я имею в виду, что вы не должны создавать 30 переменных, называемых 'pp1',' pp2' и т. Д. Вместо этого создайте единую переменную с именем 'pp', которая является список из 30 элементов, 'pp [[1]]', 'pp [[2]]' et cetera. – dash2

Смежные вопросы