我有一个庞大的数据集,其中包括以下列之一:
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多个不同的列,但大多数列都填充了值。
答案 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