说我有一个非常简单的数据框叫做 示例 :
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程序员的新手问题。
感谢任何回复的人。
修改 这只是有关情况中最简单的形式。我拥有的真实数据帧非常广泛。
答案 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]并保存一组列。
我希望你能找到答案。