Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二个数据帧中基于水平值的R列标题标签_R_Dataframe - Fatal编程技术网

第二个数据帧中基于水平值的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))){
名称