我想编写一个for循环,从已存在的数据帧中“抓取”数据,并将其存储在向量中。但是,我无法确定如何使用粘贴功能来使R访问数据框中的ohm.2行37。
这是我的最佳尝试:
for(i in 6:18){
vec = numeric(4)
for(n in 1:4){
path <- paste("dat_",i,"_",n,"$ohm.2[37]")
val <- path
vec[n] <- val
}
assign(paste0("dat_",i),vec)
}
在这种尝试中,我获得了正确命名的向量,但是它没有将数字存储在每个数据帧的ohm.2行的37行中,而是存储了文本:
[1] "dat_ 10 _ 1 $ohm.2[37]" "dat_ 10 _ 2 $ohm.2[37]"
[3] "dat_ 10 _ 3 $ohm.2[37]" "dat_ 10 _ 4 $ohm.2[37]"
答案 0 :(得分:1)
如评论中所述,您正在尝试的大多数方法都是(非常常见)不明智的方法。
如果您有多个名称相似的数据框,则它们应位于单个命名列表中。如果您需要按字符串引用列,请不要使用$
。
这是一个玩具示例:
dat <- data.frame(x = 1:5,y = letters[1:5])
# A bunch of objects; this is *not* the right way
dat_1_1 <- dat
dat_1_2 <- dat
dat_2_1 <- dat
dat_2_2 <- dat
# One way to recover from that mistake is to grab them all up with ls/mget
ls(pattern = "dat_[0-9]*_[0-9]*")
dat_list <- mget(x = ls(pattern = "dat_[0-9]*_[0-9]*"))
# Then you can select specific data frames from the list, by name use [[
# Note the use of paste0 rather than paste, to avoid spaces in the names
i <- 1
j <- 2
dat_list[[paste0("dat_",i,"_",j)]]
# And you can assign to them, altering values (avoid assign())
dat_list[[paste0("dat_",i,"_",j)]][2,"x"] <- 500
dat_list[[paste0("dat_",i,"_",j)]]