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

4

2 回答 2

0

您想要factor列并更改其levels

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

如果你像我一样,我options(stringsAsFactors=FALSE)在我的个人资料中有,所以我在这里明确设置。但是,in 的默认行为是在使用like 函数读入R任何字符串列factor时将其设为 a。read.csv

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

然后我们可以分配给他们:

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

levels(d$a)
# [1] "A" "B" "C"
于 2013-10-25T14:04:03.277 回答
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
于 2013-10-25T18:07:04.883 回答