选择R数据帧的不同元素(每行一个,但可能是不同的列),而不使用循环

时间:2014-06-19 22:34:07

标签: r dataframe

说我有data.frame个任意尺寸(np)。我想从n中提取长度为data.frame的向量,data.frame中每行向量中的一个元素。但是,每个元素所在的列可能会因行而异。有没有办法没有循环呢?

例如,如果我有以下(3x3)数据帧,称为DATA DATA

X   Y   Z
1  17  43
3   4   2
6   9   0

我想从每行的DATA中提取一个标量值。我有一个向量,称之为column.list,c(1,3,1)(在这种情况下任意选择),它给出了我想要的元素的列索引,其中column.list的第k个元素是列索引DATA中的行k。如何在没有循环的情况下这样做?我想避免循环,因为我在模拟研究中反复使用它,即使没有循环也会花费大量的运行时间,行数可能是100,000左右。非常感激!

1 个答案:

答案 0 :(得分:2)

您可以通过使用矩阵索引data.frame来完成此操作。第一列表示行,第二列表示列。所以,如果你这样做

column.list <- c(1,3,1) 
DATA[cbind(1:nrow(DATA), column.list)]

你会得到

[1] 1 2 6

根据需要。如果混合使用不同类的列,则所有变量都将被强制转换为最适应的数据类型。