2013-10-25 3 views
-1

я получил огромный набор данных, который включает в себя одну из колонки, как показано ниже:Изменение переменного в столбце

Name 
Experiment1 
Experiment2_1 
Experiment3_1 
Experiment2_1 
Experiment1 
Experiment3_1 
Data1 
Data2_1 
Data3_1 

Этой колонка сделана только этих шести разных имен. Я хотел бы изменить каждый из них до:

Experiment1 -> C_First 
Experiment2_1 -> C_Second 
Experiment3_1 -> C_Third 
Data1 -> T_First 
Data2_1 -> T_Second 
Data3_1 -> T_Third 

Можно ли сделать в R? Имя этого столбца - «Имя». В этом наборе данных есть еще 20 столбцов, но большинство из них заполнено значениями.

+1

Посмотрите на функцию '? Factor', а также'? L evels'. Они делают именно это. – Justin

+0

Можете ли вы показать мне, что на примере? – Rechlay

+0

Чтобы быть более точным, обратите внимание, что в этом случае вы должны использовать второе использование 'levels', то есть' levels (x) <- e' (где 'e' - выражение), с возможным вариантом' уровни (x) [i] <- e', где 'i' - одно или несколько значений индекса. – Juan

ответ

0

Поскольку никто еще получил более подробно, я буду (надеюсь быть справа):

#random data to simulate yours (but with shorter names...) 
DF <- data.frame(Name = c("Exp1", "Exp2_1", "Exp3_1", 
     "Exp2_1", "Exp1", "Exp3_1", "Dat1", "Dat2_1", "Dat3_1"), stringsAsFactors = F) 
#> DF 
# Name 
#1 Exp1 
#2 Exp2_1 
#3 Exp3_1 
#4 Exp2_1 
#5 Exp1 
#6 Exp3_1 
#7 Dat1 
#8 Dat2_1 
#9 Dat3_1 

#turn the column to factor 
DF$Name <- factor(DF$Name) 
#> DF$Name 
#[1] Exp1 Exp2_1 Exp3_1 Exp2_1 Exp1 Exp3_1 Dat1 Dat2_1 Dat3_1 
#Levels: Dat1 Dat2_1 Dat3_1 Exp1 Exp2_1 Exp3_1 

#change the levels like the way you want 
levels(DF$Name) <- list(C_1 = "Exp1", C_2 = "Exp2_1", 
     C_3 = "Exp3_1", T_1 = "Dat1", T_2 = "Dat2_1", T_3 = "Dat3_1") 

Значения меняются автоматически:

#> DF$Name 
#[1] C_1 C_2 C_3 C_2 C_1 C_3 T_1 T_2 T_3 
#Levels: C_1 C_2 C_3 T_1 T_2 T_3 

#> DF 
# Name 
#1 C_1 
#2 C_2 
#3 C_3 
#4 C_2 
#5 C_1 
#6 C_3 
#7 T_1 
#8 T_2 
#9 T_3 
0

Вы хотите factor столбец и изменить его levels

d <- data.frame(a=rep(letters[1:3], 10), b=runif(30), stringsAsFactors=TRUE) 
str(d) 

Если вы похожи на меня, у меня есть options(stringsAsFactors=FALSE) в моем профиле, поэтому я явно устанавливая его здесь. Однако поведение по умолчанию в R состоит в том, чтобы сделать любой столбец строки factor, когда он считывается с использованием функции read.csv.

levels(d$a) 
# [1] "a" "b" "c" 

Тогда мы можем приписать им:

levels(d$a) <- LETTERS[1:3] 

levels(d$a) 
# [1] "A" "B" "C" 
+0

Итак, это способ сделать кадр данных со строкамиAsFactors и как уже преобразовать столбец в фрейм данных в фактор? Во всяком случае, это очень полезно. – Rechlay

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