在R中使用for循环绑定来自两个数据帧的列的问题

时间:2018-10-11 03:27:57

标签: r for-loop naming cbind

我在R中分别加载了两个不同的asc文件中的7个,分别是asc[i]wasc[i][i]表示存在1:7 ascs和{ {1}}已加载到R中。我需要将wascswasc[i]组合在一起(仅将asc[i][[1]]中的第一列与整个asc[i]文件一起使用)。

应该对每对wasc[i]asc文件进行重复。

代码不断为我提供空白数据帧,所以我不知道为什么这不起作用。命名是正确的,但是代码无法识别wascasc[i]与先前加载的文件相关。

任何帮助将不胜感激。

wasc[i]

其他信息:

  1. asc文件长19列
  2. wasc文件长13列

我只想将# These data frames will reproduce my issue asc1 <- data.frame(x= c(rep("A.tif", 20)), y = 1:20) wasc1 <- data.frame(x= c(rep("B.tif", 20)), y = c(rep("Imager",20))) asc2 <- data.frame(x= c(rep("A.tif", 20)), y = 1:20) wasc2 <- data.frame(x= c(rep("B.tif", 20)), y = c(rep("Imager",20))) asc3 <- data.frame(x= c(rep("A.tif", 20)), y = 1:20) wasc3 <- data.frame(x= c(rep("B.tif", 20)), y = c(rep("Imager",20))) for (i in 1:3) { d <- paste("asc", i, sep ="") f <- paste("wasc", i, sep ="") full_wing <- as.character(paste("full_wing", i, sep = "")) assign(full_wing,cbind(d[[1]], f)) } # Output of full_wing1 data frame dput(full_wing1) structure(c("asc1", "wasc1"), .Dim = 1:2, .Dimnames = list(NULL, c("", "f"))) 文件中的第1列与整个asc文件合并,从而切出wasc文件的其余18列。

1 个答案:

答案 0 :(得分:1)

District

Citi是在多个参数上并行迭代的不错的快捷方式。它返回一个不错的# put data in a list asc = mget(ls(pattern = "^asc")) wasc = mget(ls(pattern = "^wasc")) full_wing = Map(f = function(w, a) cbind(w, a[[1]]), w = wasc, a = asc) 。您可以使用Maplist等访问各个元素。full_wing[[1]]只是一个快捷方式,上面的代码基本上等效于下面的full_wing[[3]]循环:

Map

我使用for将数据放入列表中,因为在您的示例中,您已经有results = list() for (i in seq_along(asc)) { results[[i]] = cbind(wasc[[i]], asc[[i]][[1]]) } mget等对象。更好的方法是从不创建首先是这些变量,而是将文件直接读入列表,如下所示:

asc1

您可以在How to make a list of data frames?

上看到更多的解释。

如果您只需要asc2文件中的一列,另一种简化此方法的方法是仅读入所需的列,有关那里的一些建议,请参见Only read limited number of columns