重命名列标题

时间:2017-10-24 10:20:40

标签: r dataframe

我想将数据帧FName中的FactorName映射到Stack的列标题名称。即Stack中的Factor1实际上命名为Value,Factor 2是Leverage等。我有一个大型数据集,因此手动重命名不是一个选项。

Stack <- data.frame(rowid=1:3, Factor1=2:4, Factor2=3:5, Factor3=4:6)
FName <- data.frame(FactorID=c("Factor1","Factor2","Factor3"), FactorName=c("Value","Leverage","Growth")) 

感谢。

3 个答案:

答案 0 :(得分:3)

如何使用match

Stack <- data.frame(rowid=1:3, Factor1=2:4, Factor2=3:5, Factor3=4:6)
FName <- data.frame(
    FactorID=c("Factor1","Factor2","Factor3"), 
    FactorName=c("Value","Leverage","Growth")) 

# Matching entries from FName
colnames(Stack) <- ifelse(
    !is.na(FName$FactorName[match(colnames(Stack), FName$FactorID)]),
    as.character(FName$FactorName[match(colnames(Stack), FName$FactorID)]),
    colnames(Stack));

Stack;
# rowid Value Leverage Growth
#1     1     2        3      4
#2     2     3        4      5
#3     3     4        5      6

说明:我们匹配Stack的列名和FName$FactorID的条目。如果匹配,请替换为FName$FactorName,否则保留原始列名称。

答案 1 :(得分:0)

如果我们有方便的因子名称,那么我们可以用它来改变列名

colnames(Stack) <- "facotor header file"

答案 2 :(得分:0)

使用match的另一种方法,但使用索引而不是ifelse

# Get indices of matches
m <- match(names(Stack), FName$FactorID)

# replace names where a match is found.
names(Stack)[!is.na(m)] <- as.character(FName$FactorName[m[!is.na(m)]])