我在R中分别加载了两个不同的asc
文件中的7个,分别是asc[i]
和wasc[i]
,[i]
表示存在1:7 ascs
和{ {1}}已加载到R中。我需要将wascs
与wasc[i]
组合在一起(仅将asc[i][[1]]
中的第一列与整个asc[i]
文件一起使用)。
应该对每对wasc[i]
和asc
文件进行重复。
代码不断为我提供空白数据帧,所以我不知道为什么这不起作用。命名是正确的,但是代码无法识别wasc
和asc[i]
与先前加载的文件相关。
任何帮助将不胜感激。
wasc[i]
其他信息:
我只想将# 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列。
答案 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)
。您可以使用Map
,list
等访问各个元素。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。