2014-05-02 11 views
0

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

dd = data.frame("a","b") 
dd 
# X.a. X.b. 
# 1 a b 

dd2 = data.frame("","") 
dd2 
# X.. X...1 
# 1   

names(dd)[1] 
# [1] "X.a." 

dd2[1,1] <- names(dd)[1] 
# Warning message: 
# In `[<-.factor`(`*tmp*`, iseq, value = "X.a.") : 
# invalid factor level, NAs generated 

dd2 
# X.. X...1 
# 1 <NA>  

Почему только «NA» вводится в [1,1] из dd2 ? Как я могу исправить эту ошибку?

+1

вам нужны столбцы символов или вам нужно добавить новые уровни в столбцы факторов; если вы не знаете, что это значит, прочитайте '? factor', а также посмотрите' stringsAsFactors' в '? data.frame' – eddi

+0

Что именно вы пытаетесь сделать? Вы только показали, что вы пробовали до сих пор. Ваш код кажется странным. Помимо того, что в коде выше указано, что не так, мы могли бы предложить альтернативные методы выполнения того, что вы хотите. – celiomsj

+0

Я просто пытался манипулировать данными в R. "dd2 $ A = as.character (dd2 $ A)" команда меняет столбец на столбец символов, после чего я могу назначить ему любое текстовое значение. Спасибо за ваши комментарии. – rnso

ответ

2

Когда вы передаете значение character в data.frame, оно преобразуется в factor, что может принимать только ограниченные значения.

Используйте это, чтобы избежать этого

dd2 = data.frame("","", stringsAsFactors=FALSE) 

Вы должны быть в состоянии изменить его на что вы хотите.

+0

Он по-прежнему дает такое же сообщение об ошибке. Создается третий столбец с colName 'as.is', и его первая строка содержит 'TRUE' – rnso

+1

@rnso, I * think *, что ilir предназначался для записи 'stringsAsFactors = FALSE', как это было предложено eddi в комментариях. – A5C1D2H2I1M1N2O1R2T1

+0

@ Ананда Махто, это действительно то, что я имел в виду. Я думал, что аргумент 'as.is' тоже применяется здесь, но я ошибался. Исправление ответа. – ilir

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