【发布时间】:2017-08-07 21:52:52
【问题描述】:
我正在尝试找到一种将 2 个值存储在向量的一个索引中的方法。
我有一个要转换为向量坐标的矩阵,以便我可以对该向量进行随机采样,然后将这些样本的位置转换回矩阵坐标。
filter_function<-function(df,perc){
rows<-dim(df)[1]
cols<-dim(df)[2]
vec<-vector("list",rows*cols)
for(i in 1:rows){
for(j in 1:cols){
vec[(i-1)*cols+j]<-df[i,j]
}
}
n<-rows*cols
filter<-sample(vec,n*perc)
}
我遇到的问题是函数sample 不返回矢量坐标,而且我不知道如何将行和列值转换回给我。我想知道是否有另一种方法可以将 line 8 更改为如下所示:
vec[(i-1)*cols+j]<-c(i,j)
这显然给了我错误信息
在 vec[(i - 1) * cols + j]
所以我想知道是否有类似的事情我可以做?获得坐标后,理想情况下,我需要能够快速删除这些位置中的值,例如
df<-df[-filter]
注意:我的数据有很多重复的 0 和 1 以及介于两者之间的所有内容,因此无法随机抽取样本然后使用 which 或 match功能。
请帮忙!
【问题讨论】:
-
而不是将它们存储在向量中,而是将它们存储在列表中..这样会更容易..我真的不知道发生了什么。如果你能提供更多的信息,也许可以帮助你。
-
df(I,j)的含义是什么?这显然违背了 R 的语法。我怀疑 df 是否是一个函数……根据你的定义。因为你确实有dim(df) -
我刚刚更正了它,它应该是 df[i,j],而 df 不是一个函数..df 是一个矩阵,因此我要索引它并使用 dim(df )。这样做的目的是我想完全随机地对矩阵进行采样。 'Sample' 仅对矩阵的行或列进行采样,因此我将其转换为要从中采样的数据向量,然后我想将采样的数据转换回矩阵坐标。我想要这些坐标的原因是知道我应该删除哪些数据点,因为我需要删除它们。所有这些都在上面进行了解释。
-
@KseniaKaseyArzumanova 如果以下答案对您有用,请考虑接受它作为解决方案(左侧的复选标记)。这让社区知道它有效并且应该关闭该问题。