使用循环变量

时间:2011-07-11 15:16:21

标签: r

我想重命名大量列(列标题)以使用数字名称而不是组合字母+数字名称。由于数据以原始格式存储的方式,如果我想与特定的数据列交互,我不能只使用data[[152]]访问正确的列号(因为随机问题完全从数据中过滤掉)要长时间回答评论),但我希望能够通过data$152访问它们。此外,我的数据中大约一半的列名称已加载class(data$152) = NULL但class(data[[152]]) =整数(如果我重命名data[[152]]文件,则它允许我查看{{1}作为整数)。

因此,有没有办法将循环迭代次数用作列名(如下所示)

class(data$152)

这会重新分配我的所有列标题并确保我不会遇到问题类而导致null?

作为附加背景信息,我的数据从逗号分隔的.csv文件导入,其值99分配给NA的答案,第一行是列名称/标题

    for (n in 1:415) {
        names(data)[n] <-"n"    # name nth column after number 'n'
    }

有415列标题,格式为Q001,Q002等 大约有200行没有行标签/没有标签列

1 个答案:

答案 0 :(得分:3)

您可以在没有循环的情况下执行此操作,如下所示:

names(data) <- 1:415

让我举一个例子说明:

dat <- data.frame(a=1:4, b=2:5, c=3:6, d=4:7)
dat
  a b c d
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7

现在重命名列:

names(dat) <- 1:4
dat
  1 2 3 4
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7

编辑:如何访问新数据

@Ramnath非常准确地指出您无法使用dat$1访问您的数据:

dat$1
Error: unexpected numeric constant in "dat$1"

相反,您必须在反引号中包装列名:

dat$`1`
[1] 1 2 3 4

或者,您可以使用字符和数字数据的组合来重命名列。这可能是处理问题的一种更方便的方法:

names(dat) <- paste("x", 1:4, sep="")
dat
  x1 x2 x3 x4
1  1  2  3  4
2  2  3  4  5
3  3  4  5  6
4  4  5  6  7