更改列中的变量

时间:2013-10-25 13:35:15

标签: r

我有一个庞大的数据集,其中包括以下列之一:

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多个不同的列,但大多数列都填充了值。

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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