在R中使用for循环从两个数据帧绑定列时出现问题
我有7个不同的在R中使用for循环从两个数据帧绑定列时出现问题,r,for-loop,naming,cbind,R,For Loop,Naming,Cbind,我有7个不同的asc文件加载到R中,asc[I]和wasc[I],[I]表示有1:7asc和wasc加载到R中。我需要将wasc[I]与asc[I][[1](仅是asc[I]中的第一列)和整个wasc[i]文件) 每对asc和wasc文件都应重复此操作 代码一直给我空白的数据帧,所以我不知道为什么这不起作用。命名是正确的,但是代码没有识别出asc[i]和wasc[i]与以前加载的文件相关 任何帮助都将不胜感激 # These data frames will reproduce my issue
asc
文件加载到R中,asc[I]
和wasc[I]
,[I]
表示有1:7asc
和wasc
加载到R中。我需要将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")))
#这些数据帧将重现我的问题
asc1
Map
是在多个参数上并行迭代的一个很好的快捷方式。它返回一个漂亮的列表
。您可以使用访问单个元素,例如,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
、asc2
等对象。更好的方法是一开始决不创建这些变量,而是直接将文件读取到列表中,如下所示:
asc_paths = list.files(pattern = "^asc")
asc = lapply(asc_paths, read.table)
你可以在网站上看到更多的解释
如果您只需要一列asc
文件,另一种简化方法是只读取所需的列,请参阅此处的一些建议。Hi Connor,如果您可以准备一个可复制的示例,这样我们就可以将您的代码直接剪切并粘贴到我们自己的R会话中,运行它,看看发生了什么。有时,这需要您使用dput
准备数据(或使用相同格式的代表性数据子集)。谢谢:)@神秘,我只是给我的问题添加了更多的背景知识。代码正在生成一个空(2列,1行)向量,该向量命名正确,但实际数据中有NA。欢迎使用堆栈溢出!您能否通过共享您的数据样本使您的问题重现,以便其他人能够提供帮助(请不要使用str()
、head()
或屏幕截图)?您可以使用和包来帮助您实现这一点。另请参阅&我想附上两份asc样本,但我不知道如何将其纳入问题@Tung中。你有我可以使用的特定功能吗?好的,很抱歉让大家感到困惑。我添加了一些数据帧,这些数据帧将重现我遇到的问题@格雷戈
asc_paths = list.files(pattern = "^asc")
asc = lapply(asc_paths, read.table)