Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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_Vector - Fatal编程技术网

如何使用每个向量元素的名称(在R中)将多个向量组合到一个数据帧中

如何使用每个向量元素的名称(在R中)将多个向量组合到一个数据帧中,r,dataframe,vector,R,Dataframe,Vector,我想将多个向量连接到一个数据帧中,使用每个向量的名称来指导连接 例如,如果我有向量x1、x2和x3: sample(1:50,20)->x1; sample(1:50,20)->x2; sample(1:50,20)->x3 每个向量都有这样的名称: nam <- paste("A",1:50, sep=""); names(x1)<-as.character(sample(nam,20)); names(x2)<-as.character(sample(n

我想将多个向量连接到一个数据帧中,使用每个向量的名称来指导连接

例如,如果我有向量x1、x2和x3:

sample(1:50,20)->x1; sample(1:50,20)->x2; sample(1:50,20)->x3
每个向量都有这样的名称:

nam <- paste("A",1:50, sep=""); names(x1)<-as.character(sample(nam,20)); names(x2)<-as.character(sample(nam,20)); names(x3)<-as.character(sample(nam,20))
这意味着名称A1仅与x1中的值(即3)关联,而不与x2或x3中的值关联。A2仅与矢量x2和x3中的值关联,而与x1中的值无关。等等

你知道怎么做吗


非常感谢,

我提出了这样的建议:

sort(unique(names(c(x1,x2,x3))))->nam2

cbind(nam2,x1[match(nam2,names(x1))],x2[match(nam2,names(x2))],x3[match(nam2,names(x3))])
我想对列表中的500多个向量这样做,你知道如何把它放到lappy或类似的东西中吗

再次感谢

创建数据帧列表后,请考虑以下问题:

set.seed(61718)  # PLACED AT VERY TOP FOR REPRODUCIBILITY
...

# USES ANY OBJECT WITH "x" IN NAME (HERE BEING c("x1", "x2", "x3"))
df_list <- lapply(ls(pattern="x"), function(d)
  # CONVERTS VECTOR INTO DATAFRAME AND RENAMES COLUMNS
  setNames(transform(data.frame(get(d)), letter=names(get(d))), c(d, "letter"))
)

# CHAIN MERGE
master_df <- Reduce(function(x,y) merge(x, y, by="letter", all=TRUE), df_list)

head(master_df, 10)    
#    letter x1 x2 x3
# 1     A11 50 12  5
# 2     A12 34  8  1
# 3     A13  3 31 NA
# 4     A14 42  7 NA
# 5     A17 27 44 41
# 6      A2 14 NA 46
# 7     A24  2 NA NA
# 8     A26 29  1 34
# 9     A30 23  4 38
# 10    A31  1 25 12
set.seed(61718)  # PLACED AT VERY TOP FOR REPRODUCIBILITY
...

# USES ANY OBJECT WITH "x" IN NAME (HERE BEING c("x1", "x2", "x3"))
df_list <- lapply(ls(pattern="x"), function(d)
  # CONVERTS VECTOR INTO DATAFRAME AND RENAMES COLUMNS
  setNames(transform(data.frame(get(d)), letter=names(get(d))), c(d, "letter"))
)

# CHAIN MERGE
master_df <- Reduce(function(x,y) merge(x, y, by="letter", all=TRUE), df_list)

head(master_df, 10)    
#    letter x1 x2 x3
# 1     A11 50 12  5
# 2     A12 34  8  1
# 3     A13  3 31 NA
# 4     A14 42  7 NA
# 5     A17 27 44 41
# 6      A2 14 NA 46
# 7     A24  2 NA NA
# 8     A26 29  1 34
# 9     A30 23  4 38
# 10    A31  1 25 12
all_name_df <- data.frame(letter=nam)

df_list <- lapply(c("x1", "x2", "x3"), function(d) {
  df <- setNames(transform(data.frame(get(d)), letter=names(get(d))), c(d, "letter"))
  merge(all_name_df, df, all.x=TRUE)[-1]  # -1 REMOVES letter COLUMN
})

master_df <- cbind(all_name_df, do.call(cbind, df_list))

head(master_df, 10)
#    letter x1 x2 x3
# 1      A1 NA NA NA
# 2      A2 NA 32 19
# 3      A3 50 12  5
# 4      A4 34  8  1
# 5      A5  3 31 NA
# 6      A6 42  7 NA
# 7      A7 NA NA NA
# 8      A8 NA 40 NA
# 9      A9 27 44 41
# 10    A10 NA NA NA