R中的reduce()在类似的变量名称上引起错误 [英] Reduce() in R over similar variable names causing error

查看:100
本文介绍了R中的reduce()在类似的变量名称上引起错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个通过lapply和split操作生成的19个嵌套列表. 这些列表的格式为:

I have 19 nested lists generated from a lapply and split operation. These lists are in the form:

#list1
Var col1 col2 col3
A    2     3    4
B    3     4    5

#list2
Var col1 col2 col3

A    5    6     7
B    5    4     4

......

#list19

Var col1 col2 col3

A    3   6    7
B    7   4    4

我已经能够与列表合并

merge.all <- function(x, y) merge(x, y, all=TRUE, by="Var")
out <- Reduce(merge.all, DataList)

但是由于其他列的名称相似,我得到了一个错误.

I am however getting an error due to the similarity in the names of the other columns.

如何将列表的名称连接到变量名称,以便获得如下信息:

How can I concatenate the name of the list to the variable names so that I get something like this:

Var list1.col1 list1.col2 list1.col3  ..........   list19.col3
 A    2          3          4                            7 
 B    3          4          5          ..........        4

推荐答案

我真的可以肯定有人会提出更好得多的解决方案.但是,如果您正在寻求一种快速而肮脏的解决方案,那么这似乎可以解决问题.

I'm really sure somebody will come up with a much, much better solution. However, if you're after a quick and dirty solution, this seems to work.

我的计划是在合并之前简单地更改列名称.

My plan was to simply change the column names prior to merging.

#Sample Data
df1 <- data.frame(Var = c("A","B"), col1 = c(2,3), col2 = c(3,4), col3 = c(4,5))
df2 <- data.frame(Var = c("A","B"), col1 = c(5,5), col2 = c(6,4), col3 = c(7,5))
df19 <- data.frame(Var = c("A","B"), col1 = c(3,7), col2 = c(6,4), col3 = c(7,4))

mylist <- list(df1, df2, df19)
names(mylist) <- c("df1", "df2", "df19") #just manually naming, presumably your list has names


## Change column names by pasting name of dataframe in list with standard column names. - using ugly mix of `lapply` and a `for` loop:

mycolnames <- colnames(df1)
mycolnames1 <- lapply(names(mylist), function(x) paste0(x, mycolnames)) 


for(i in 1:length(mylist)){
  colnames(mylist[[i]]) <- mycolnames1[[i]]
  colnames(mylist[[i]])[1] <- "Var" #put Var back in so you can merge
}



## Merge
merge.all <- function(x, y)
  merge(x, y, all=TRUE, by="Var")

out <- Reduce(merge.all, mylist)
out


#  Var df1col1 df1col2 df1col3 df2col1 df2col2 df2col3 df19col1 df19col2 df19col3
#1   A       2       3       4       5       6       7        3        6        7
#2   B       3       4       5       5       4       5        7        4        4

你去了-它可以工作,但是非常难看.

There you go - it works but is very ugly.

这篇关于R中的reduce()在类似的变量名称上引起错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆