第二个数据帧中基于水平值的R列标题标签
使用以下示例数据第二个数据帧中基于水平值的R列标题标签,r,dataframe,R,Dataframe,使用以下示例数据 Model <- c(1,1,1,1,1,2,2,2,2,4,4,4,4,3,3,3,3,3) FactorID <- c ("Factor1", "Factor2", "Factor4", "Factor3", "Factor5", "Factor2", "Factor3", "Factor4", "Factor1", "Factor2", "Factor3",
Model <- c(1,1,1,1,1,2,2,2,2,4,4,4,4,3,3,3,3,3)
FactorID <- c ("Factor1", "Factor2", "Factor4", "Factor3", "Factor5", "Factor2", "Factor3", "Factor4", "Factor1", "Factor2", "Factor3", "Factor4", "Factor1", "Factor3", "Factor2", "Factor4", "Factor5", "Factor1")
FactorName<- c("SEK", "GBP", "USD", "CAD", "YEN", "GBP", "USD", "CAD", "EUR", "CAD", "EUR", "USD", "GBP", "YEN", "CAD", "EUR", "USD", "SEK")
a <- data.frame(Model,FactorID,FactorName)
Model <- c(2,1,3,4)
Factor1 <- c(0.054, 0.113, 0.903, 0.720)
Factor2 <- c(0.885, 0.153, 0.708, 0.750)
Factor3 <- c(0.430, 0.989, 0.518, 0.843)
Factor4 <- c(0.533, 0.6328, 0.343, 0.961)
Factor5 <- c("-", 0.055, 0.699, "-")
b <- data.frame(Model,Factor1,Factor2,Factor3,Factor4,Factor5)
Model您可以这样做。它通过Model
拆分两个dfs,然后循环遍历它们,将a
的列与b
的列名相匹配,并指定适当的货币作为新名称
bSplit <- split(b,b$Model)
aSplit <- split(a,a$Model)
for(i in seq_along(bSplit)){
names(bSplit[[i]])[-1] <-
as.character(aSplit[[i]]$FactorName)[
match(names(bSplit[[i]])[-1],
aSplit[[i]]$FactorID)]
}
bSplit
$`1`
Model SEK GBP CAD USD YEN
2 1 0.113 0.153 0.989 0.6328 0.055
$`2`
Model EUR GBP USD CAD NA
1 2 0.054 0.885 0.43 0.533 -
$`3`
Model SEK CAD YEN EUR USD
3 3 0.903 0.708 0.518 0.343 0.699
$`4`
Model GBP CAD EUR USD NA
4 4 0.72 0.75 0.843 0.961 -
bSplit您可以这样做。它通过Model
拆分两个dfs,然后循环遍历它们,将a
的列与b
的列名相匹配,并指定适当的货币作为新名称
bSplit <- split(b,b$Model)
aSplit <- split(a,a$Model)
for(i in seq_along(bSplit)){
names(bSplit[[i]])[-1] <-
as.character(aSplit[[i]]$FactorName)[
match(names(bSplit[[i]])[-1],
aSplit[[i]]$FactorID)]
}
bSplit
$`1`
Model SEK GBP CAD USD YEN
2 1 0.113 0.153 0.989 0.6328 0.055
$`2`
Model EUR GBP USD CAD NA
1 2 0.054 0.885 0.43 0.533 -
$`3`
Model SEK CAD YEN EUR USD
3 3 0.903 0.708 0.518 0.343 0.699
$`4`
Model GBP CAD EUR USD NA
4 4 0.72 0.75 0.843 0.961 -
bSplit这里是另一种方法。我首先通过将FactorName
和FactorName
转换为字符,重新排列了a
中FactorName
的顺序。然后,我将b
按Model
拆分。在lappy()
中,我为每个Model
获取FactorName
,并使用它们重写列名
library(dplyr)
arrange(a, Model, FactorID) %>%
mutate_all(funs(as.character(.))) ->a
split(b, f = b$Model) -> whatever
lapply(1:length(ana), function(x){
foo <- a$FactorName[a$Model == x]
names(whatever[[x]]) <- c("Model", foo)
whatever[[x]]
})
#[[1]]
# Model SEK GBP CAD USD YEN
#2 1 0.113 0.153 0.989 0.6328 0.055
#
#[[2]]
# Model EUR GBP USD CAD NA
#1 2 0.054 0.885 0.43 0.533 -
#
#[[3]]
# Model SEK CAD YEN EUR USD
#3 3 0.903 0.708 0.518 0.343 0.699
#
#[[4]]
# Model GBP CAD EUR USD NA
#4 4 0.72 0.75 0.843 0.961 -
库(dplyr)
排列(a、模型、因式分解)%>%
突变所有(funs)(如字符()->a
拆分(b,f=b$Model)->随便什么
lappy(1:长度(ana),函数(x){
foo这里还有另一种方法。我首先在a
中通过将FactorName
和FactorName
转换为字符来重新排列FactorName
的顺序。然后,我在lapply()中通过Model
拆分b
,我为每个模型
获取FactorName
,并使用它们重写列名
library(dplyr)
arrange(a, Model, FactorID) %>%
mutate_all(funs(as.character(.))) ->a
split(b, f = b$Model) -> whatever
lapply(1:length(ana), function(x){
foo <- a$FactorName[a$Model == x]
names(whatever[[x]]) <- c("Model", foo)
whatever[[x]]
})
#[[1]]
# Model SEK GBP CAD USD YEN
#2 1 0.113 0.153 0.989 0.6328 0.055
#
#[[2]]
# Model EUR GBP USD CAD NA
#1 2 0.054 0.885 0.43 0.533 -
#
#[[3]]
# Model SEK CAD YEN EUR USD
#3 3 0.903 0.708 0.518 0.343 0.699
#
#[[4]]
# Model GBP CAD EUR USD NA
#4 4 0.72 0.75 0.843 0.961 -
库(dplyr)
排列(a、模型、因式分解)%>%
突变所有(funs)(如字符()->a
拆分(b,f=b$Model)->随便什么
lappy(1:长度(ana),函数(x){
早上好
我为您提出了一个解决方案,如下所示:
library(stringr)
library(plyr)
models = vector("list", length(unique(b$Model)))
for (i in seq_along(1:(ncol(b) - 1))) {
name <- paste0("model_",i,sep<-"")
file <- subset(b ,Model == i)
temp <- a[grep(file[,"Model"],a[,"Model"]) ,]
for (col in colnames(file)[-1]) {
colnames(file)[grep(col,colnames(file))] <- as.character(subset(temp,FactorID == col)[1,3])
}
models[[i]] = assign(name,file)
}
rm(i,col,temp,file)
models
库(stringr)
图书馆(plyr)
模型=向量(“列表”,长度(唯一(b$Model)))
对于(i)和(1:(ncol(b)-1))){
name早上好
我为您提出了一个解决方案,如下所示:
library(stringr)
library(plyr)
models = vector("list", length(unique(b$Model)))
for (i in seq_along(1:(ncol(b) - 1))) {
name <- paste0("model_",i,sep<-"")
file <- subset(b ,Model == i)
temp <- a[grep(file[,"Model"],a[,"Model"]) ,]
for (col in colnames(file)[-1]) {
colnames(file)[grep(col,colnames(file))] <- as.character(subset(temp,FactorID == col)[1,3])
}
models[[i]] = assign(name,file)
}
rm(i,col,temp,file)
models
库(stringr)
图书馆(plyr)
模型=向量(“列表”,长度(唯一(b$Model)))
对于(i)和(1:(ncol(b)-1))){
名称