Я бы хотел задать вам вопрос еще раз, если у вас есть время.
Я представляю вам мой обычный df-фрейм данных, который я уже использовал ранее в моих предыдущих квестах, как преобразованную, упрощенную версию моегореальный df dataframe, который было бы слишком сложно показать здесь.Однако основные характеристики все те же.
id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,4)
df <-data.frame(id,a,b,c,d,e)
df
df.list <- lapply(df[,2:6],function(x, id){ t(table(x, id, useNA = "ifany")) }, df$id)
df.list
Видите ли, в основном то, что я создал здесь, представляет собой коллекцию общей суммы вхождений каждого различного числа в столбцах «a» - «e».'и сгруппированы по идентификаторам в столбце id одновременно.
На следующем шаге я создал цикл, который выглядит следующим образом:
for (i in names(df.list))
{
df.list[i]
assign( paste("var",i,sep=""),
(matrix(matrix(unlist(df.list[i])),ncol=nlevels(factor(df[,i])),nrow=3))/10
)
}
Он делит каждый элементсписок, созданный ранее 10. Тем не менее, это только первая половина моего всего цикла, которую я хотел реализовать, но, по крайней мере, он ЕЩЕ работает нормально и нормально, у меня нет проблем с этим, просто отправьте эти коды в R здесь ->
vara
varb
varc
vard
vare
Теперь более сложная часть наступает сейчас, когда я пытаюсь выполнить раздел «for (k in 1: 3)».Итак, давайте попробуем снова отправить эти строки (а также предыдущую половину части всего цикла).
for (i in names(df.list))
{
df.list[i]
assign( paste("var",i,sep=""),
(matrix(matrix(unlist(df.list[i])),ncol=nlevels(factor(df[,i])),nrow=3))/10
)
for (k in 1:3)
assign( paste("var",i,k,sep="."),
vari[k,]*5
)
}
Моя проблема в строке vari[k,]*5
.(В действительности я должен разобраться с умножением матриц на этом этапе.) Код не распознает переменные, однако я уже определил i
ранее.И я не собираюсь использовать vara
, varb
, varc
... и т. Д., Потому что мне нужно, чтобы это было автоматизировано.Причина: мне придется регулярно обновлять мой реальный файл данных df, поэтому число переменных может со временем меняться (у меня не обязательно будут переменные только от a
до e
, скорее a
до f
или a
до y
и т. Д.
Итак, я получаю следующее сообщение об ошибке:
Error in assign(paste("var", i, k, sep = "."), vari[k, ] * 5): object 'vari' not found
Что я здесь пропускаю / делаю неправильно? Я просто хочу сослаться надругой объект, который я уже создал в том же цикле, но все еще не могу распознать. Есть ли здесь правильное решение?
Большое спасибо