Переменная как имя столбца в кадре данных
Можно ли использовать строку, хранящуюся в переменной, как имя столбца в новом фрейме данных? Ожидаемый результат:
col.name <- 'col1'
df <- data.frame(col.name=1:4)
print(df)
# Real output
col.name
1 1
2 2
3 3
4 4
# Expected output
col1
1 1
2 2
3 3
4 4
Я знаю, что я могу создать фрейм данных, а затем использовать names() для переименования столбца или использовать df [, col.name] для существующего объекта, но я хотел бы знать, есть ли другое решение, которое могло бы во время создания кадра данных.
Ответы
Ответ 1
Вы не можете передать переменную в имя такого аргумента.
Вместо этого вы можете сделать следующее:
df <- data.frame(placeholder_name = 1:4)
names(df)[names(df) == "placeholder_name"] <- col.name
или используйте имя по умолчанию "V1"
:
df <- data.frame(1:4)
names(df)[names(df) == "V1"] <- col.name
или присвоить положением:
df <- data.frame(1:4)
names(df)[1] <- col.name
или если у вас есть только один столбец, просто замените весь атрибут names
:
df <- data.frame(1:4)
names(df) <- col.name
Также существует функция set_names
в пакете magrittr
, которую вы можете использовать для последнего решения за один шаг:
library(magrittr)
df <- set_names(data.frame(1:4), col.name)
Но set_names
является просто псевдонимом для:
df <- `names<-`(data.frame(1:4), col.name)
который является частью базы R. Выяснение, почему это выражение работает и имеет смысл, будет хорошим упражнением.
Ответ 2
В дополнение к ответу ssdecontrol есть второй вариант.
Вы ищете mget
. Сначала назначьте имя переменной, а затем значение переменной, которую вы ранее назначили. После этого mget проверит строку и передаст ее в data.frame.
assign(col.name, "col1")
assign(paste(col.name), 1:4)
df <- data.frame(mget(col.name))
print(df)
col1
1 1
2 2
3 3
4 4
Ответ 3
Я не рекомендую вам это делать, но:
col.name <- 'col1'
eval(parse(text=paste0('data.frame(', col.name, '=1:4)')))