如何使用“粘贴”来引用数据框列

时间:2018-06-25 20:15:40

标签: r dataframe

我想编写一个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]"

1 个答案:

答案 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)]]