我想将数据帧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"))
感谢。
答案 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)]])