Добро пожаловать в сообщество R!Это помогло бы, если бы вы могли прояснить вашу проблему немного с помощью примера кода (ввод, желаемый вывод).Я предполагаю, что вы пытаетесь создать новую переменную в каждом цикле?Может быть, поможет следующее:
Предположим, мы сделаем 3 итерации.Я создам простой пример набора данных с 2 столбцами
n <- 3
# create an example dataframe with 2 columns
df<- as.data.frame(rbind(c(1,1),c(2,2),c(1,2)))
colnames(df)<- c("v1","ID")
Далее создадим пустой data.frame.На последнем шаге вы не можете присоединиться по столбцу ID
, если df.final
не имеет столбца с таким именем!
`df.final <- data.frame(matrix(ncol = 2, nrow = 0))
colnames(df.final)<- c("v1","ID")
Давайте сделаем цикл for
for(i in 1:n) {
df[paste(colnames(df[1]),toString(i),sep ="_")] <- df[1]
if(i==n){
df.final <- df
} else {
df.final <- merge(df.final, df, by = "ID") #there is no point of doing the join in my example!
}
}
Поскольку я не уверен, что именно вы хотели сделать, я написал некоторый код, который копирует содержимое столбца 1 и записывает его в столбец, имя которого совпадает с именем столбца плюс суффикс I. Итак, давайте посмотрим наоператор:
colnames(df[1])
возвращает имя первого столбца кадра данных в виде строки (var1) toString(i)
преобразует ваш итератор i в строку. Используя функцию baste с sep ="_"
, выобъедините имя первого столбца и вашего итератора в одну строку.
df["varname"]
- это способ ссылки на столбец в кадре данных.
Ваш вывод будет выглядеть следующим образом
v1 ID v1_1 v1_2 v1_3
1 1 1 1 1 1
2 2 2 2 2 2
3 1 2 1 1 1
Надеюсь, это поможет!