2014-01-29 3 views
2

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

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

Header <- c("Date", "Time", "Data") 
colnames(Z) <- Header 

Есть простой способ, чтобы преобразовать эти имена столбцов и вектор имен, так что, когда я типа «данные» в командной строке, то значения из столбца 3 появляются (и поэтому я могу назвать эти имена легко в скрипт)?

Большое спасибо!

+2

Не уверен, что я понимаю ... вы хотите «прикрепить»? как в 'attach (Z); Data'. Но я бы настоятельно рекомендовал против этого. – Justin

+0

Я назвал столбцы моего кадра данных ... теперь то, что я хочу сделать, это те же имена столбцов, что и имена вектора, соответствующие фактическому столбцу данных. –

+0

Опять же, я не понимаю и не рекомендую этого, но: 'sapply (names (z), function (x) присваивать (x, z [[x]], envir = .GlobalEnv))'. «R» способ сделать это - просто получить доступ к ним внутри 'data.frame':' x <- 'Data'; Z [[х]] '. – Justin

ответ

1

Ниже приведен пример подключения и снятия функций с вашими данными. Я считаю, что это нормально для интерактивного использования, но это не лучшая практика для программирования. Наверное, на самом деле это не рекомендуется, но я считаю, что никогда не использовал его!

Z <- data.frame(matrix(rpois(9, 80), ncol = 3, nrow = 9)) 
head(Z) 
> head(Z) 
X1 X2 X3 
1 69 69 69 
2 80 80 80 
3 69 69 69 
4 103 103 103 
5 65 65 65 
6 81 81 81 

# Use different names for each column! 

Header <- c("Date_1", "Time", "Data_2") 
colnames(Z) <- Header 

head(Z) 
Date_1 Time Data_2 
1 69 69 69 
2 80 80 80 
3 69 69 69 
4 103 103 103 
5 65 65 65 
6 81 81 81 


attach(Z) 

Date_1 
[1] 69 80 69 103 65 81 84 70 93 

Time 
[1] 69 80 69 103 65 81 84 70 93 

detach(Z) 

# Do not forget to detach! 
Time 
Error: objeto 'Time' no encontrado 

Может быть другой вариант использования с:

with(Z, Time) 
# [1] 91 81 81 87 82 72 81 74 85 

with(Z, quantile(Time)) 
# 0% 25% 50% 75% 100% 
# 72 81 81 85 91 

Или просто Подменю каждой переменной.

# Subsetting keeping attributes 
Z[2] 
Z["Time"] 

attributes(Z["Time"]) 
# $names 
# [1] "Time" 

# $class 
# [1] "data.frame" 

# $row.names 
# [1] 1 2 3 4 5 6 7 8 9 

# Subsetting droping attributes 
Z$Time 
Z[["Time"]] 

attributes(Z[["Time"]]) 
# NULL 
0

Обычно доступ столбцы из кадра данных с помощью оператора «$». В вашем случае вы хотите использовать

Z$Data 

Чтобы получить вектор «Данные». R имеет функцию, называемую 'attach()', которая будет по существу обозначать один фрейм данных как ваш опорный кадр, так что любая переменная, которую вы вводите в командной строке, которая соответствует головке столбца в вашем кадре данных, вернет этот вектор, ala

attach(Z) 
Data 

Вернет вектор данных. Однако это не рекомендуется, поскольку отслеживание того, какая рамка прилагается, не всегда легко и может иметь непреднамеренные последствия. Если вы хотите создать отдельные векторы данных для каждого столбца, которые были независимы от кадра данных, но с именами, идентичными именами столбцов вы могли бы сделать это следующим образом:

Header <- c("Date", "Time", "Data") 
for (i in 1:length(Header)){ 
    assign(Header[i], Z[ ,i]) 
    } 

Хотя еще раз я бы просто использовать «$ 'для доступа к столбцам из фрейма данных. Лучше, чем иметь две копии данных, плавающих вокруг с похожими именами.

+0

Спасибо за все ответы, ребята! Я думаю, что я буду использовать оператор «$» ... это огромный набор данных, и нет необходимости иметь две копии данных. –

+0

Пожалуйста, подумайте о принятии ответа, если это сработает для вас. Таким образом, вопрос перестает появляться как неотвеченный. Благодарю. – TomR

+2

Соглашение о SO должно подождать день, прежде чем принимать ответ. В противном случае вы в значительной степени гарантированы, что никто не будет смотреть на него. – jlhoward

0

Вы можете использовать оператор $ называть столбец по имени, или вы можете вызвать столбец, это положение в кадре данных, в вашем примере:

z$Data 

или

z[3] 

или

z[,3] 

Все одинаковые.

Проверьте эту справочную карточку: http://cran.r-project.org/doc/contrib/Short-refcard.pdf. Я не могу сказать, сколько раз это помогало мне, когда я только начинал с Р.

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