我有一个数据帧和一个特征向量列表。我试图获取特征向量列表,将每个特征向量(它们按顺序)匹配到数据帧列并返回仅包含特征向量大于1的列的数据帧。我的伪代码看起来像这样:
1) get eigenvalues for matrix stored as variable (called: ev)
2) iterate through each element of ev
3) check if the absolute value of the element is greater then 1
3a) if so, return dataframe column
我想这样做是R就像这样:
#1
count=0
matr<as.matrix(MY_DF)
matr_temp1<-matr[,1:length(matr[,1])]#force matrix to drop COLS to have same number rows as cols
ev<-eigen(matr_temp1)$values
#2
result<-lapply(ev, function(x){
count+=1
if((abs(x)>1),return count)
})
#3
abs(x)>1
#3a
#convert numbers to df columns
df=subset(df,select=c(result))
显然这需要工作,有人可以建议改变吗?解释会很棒:)
数据框中转换为矩阵的片段(如果您需要更多数据,请告诉我)
> df[1:5,1:5]
achievement.mineWood achievement.openInventory dyad_number stat.damageDealt stat.damageTaken
1 2 6 1 1170 2210
2 17 12 1 840 800
3 48 37 2 2595 520
4 16 22 3 5410 3105
5 36 6 3 2720 3300
前5个特征值:
> ev[1:5]
[1] 646127.12+ 0.00i -118038.12+ 0.00i 65537.13+ 0.00i -34741.55+33905.02i -34741.55-33905.02i
答案 0 :(得分:1)
我的问题的解决方案是单行,感谢@ user20650。
df[, abs(ev) > 1]
这遍历数据框df
并仅返回列表ev
中的数据> 1的列