说我有data.frame
个任意尺寸(n
到p
)。我想从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左右。非常感激!
答案 0 :(得分:2)
您可以通过使用矩阵索引data.frame来完成此操作。第一列表示行,第二列表示列。所以,如果你这样做
column.list <- c(1,3,1)
DATA[cbind(1:nrow(DATA), column.list)]
你会得到
[1] 1 2 6
根据需要。如果混合使用不同类的列,则所有变量都将被强制转换为最适应的数据类型。