【问题标题】:Loop over non-standard variable names in R循环 R 中的非标准变量名
【发布时间】:2018-09-10 14:43:25
【问题描述】:

我有一个数据框 (df),其中的变量看起来类似于向量变量:

myvariable[1], myvariable[2] , myvariable[3]

但是,如果我想引用它们,R 会自动在它们周围创建 barticks:

df$`myvariable[1]`

我想在 for 循环中使用这些变量,因此想自动更改括号内的数字。有谁知道如何做到这一点?

PS:这个问题与其他问题不同,因为 R 不将我的变量视为向量变量,而是将其视为看起来相同的单个变量。因此,我的变量的 [] 部分仅被视为某种字符串,而不是子集运算符。

PS2:dput(head(zTT$subjects[, c("myvariable[1]","myvariable[3]","myvariable[4]")],4))

structure(list(\`myvariable[1]\` = c(2, 4, 2, 9), \`myvariable[3]\` = c(1, 
1,2, 3), \`myvariable[4]\` = c(2, 4, 2, 7)), .Names = c("myvariable[1]", 
"myvariable[3]", "myvariable[4]"), row.names = c(NA, 4L), class = "data.frame")

【问题讨论】:

  • 使用[[ 代替$df[[myvariable[1]]]
  • 非常感谢您的快速回复。不幸的是,这不起作用。
  • 很抱歉听到这个消息。它基于假设您有一个 data.frame 和列名或索引存储在myvariabledf <- data.frame(col1 = 1:5, col2 = 6:10, col3 = 11:15); myvariable <- c('col1', 'col2'); df[[myvariable[1]]] 此外,doesn't work 可以有很多含义
  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。使用dput() 共享数据,以便我们确切地知道我们正在处理什么。此外,通常有更有效的方法来编写代码来循环列而不是编写 for 循环。最好更准确地描述您要完成的工作。
  • 我不确定您的数据集中还有哪些其他变量,但您可以循环通过 names(dataset) 而不是使用索引进行循环(这可能会解决问题)。否则,您可能需要在循环中“构造”名称。例如,如果i 是索引号,您可以执行paste0("myvariable[", i, "]") 之类的操作。 (也许添加一些有关您尝试执行的实际任务的信息,因为这可能是一个“XY”问题。:))

标签: r for-loop vector


【解决方案1】:

正如 akrun 所建议的,您可以使用 [[。下面的代码使用您自己的数据框来构造与列表名称对应的字符串。

temp <- structure(list(`myvariable[1]` = c(2, 4, 2, 9),
                       `myvariable[3]` = c(1, 1,2, 3),
                       `myvariable[4]` = c(2, 4, 2, 7)),
                  .Names = c("myvariable[1]", "myvariable[3]",
                             "myvariable[4]"), row.names = c(NA, 4L),
                  class = "data.frame")

for (i in c(1, 3, 4)) {
  myVar <- paste0("myvariable[", i, "]")
  print(temp[[myVar]])

}

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多