使用for循环获取数据帧的第n列

时间:2017-05-20 10:31:43

标签: r loops dataframe

说我有一个非常简单的数据框叫做 示例

read.table(header=TRUE,text="a_1 a_2 a_3
                              1    1   1
                              1    1   1
                              1    1   1")

我想通过使用for循环来获取此数据帧的第n列。例如:

for(i in i:3) {
    nth <- sample$a_[i]
    #there are still a lot more lines of code after this, think a bajillion calculations
}
很明显,这不会起作用(我认为Java真的很难)。 R中的任何等价物?

这是来自新手R程序员的新手问题。

感谢任何回复的人。

修改 这只是有关情况中最简单的形式。我拥有的真实数据帧非常广泛。

2 个答案:

答案 0 :(得分:3)

您可以使用data_frame[, "column_name"]表示法按名称访问列。对于您的示例,它将如下所示:

col_names <- colnames(sample)
for(i in c(1:3)) {
   nth <- sample[, col_names[i]]
   print(nth)
}

它给出了

[1] 1 1 1
[1] 1 1 1
[1] 1 1 1

对于更复杂的情况,您可以使用eval函数来评估字符串中的命令。在这里,您可能需要sprintf函数来准备该字符串。例如:

for(i in c(1:3)) {
    # prepare call string
    name_call <- sprintf("sample$a_%s", i)
    # evaluate command from string
    nth <- eval(parse(text = name_call))
    print(nth)
}

它再次给出了:

[1] 1 1 1
[1] 1 1 1
[1] 1 1 1

答案 1 :(得分:0)

for (i in 1:n){nth=sample[,i]}

在循环播放1:n后,只会给你第n行。

如果你有一个想要循环的行的特殊字符串,那么你可以创建一个向量

z<-c(1,3,6)

sample<-read.table(header=TRUE,text="a_1 a_2 a_3 a_4 a_5 a_6
                              1    1   1 2 3 4
                              1    1   1 5 6 7
                              1    1   1 8 9 10")

只是

for (i in 1:length(z)){nth=sample[,z[i]]}

如果您不想覆盖列,那么您只需要使用nth [i]并保存一组列。

我希望你能找到答案。