我一直在努力使用R来分析财务数据。我是一般的编程新手,真的,除非习惯于在Excel中工作。因此,我花了很多时间(可能是太多时间)格式化我的CSV文件,这样我就可以最大限度地减少在R中工作时的麻烦,但这没有用。
这是我的PCA分析代码。当我使用没有N / As或空白的较小数据文件时,我只能使它工作,但我需要知道如何在R中处理这些。
returns <- read.csv("PCA Data File.csv", skip = 1, header = T)
#standardize the variables
returns.pca <- prcomp(returns[2:ncol(returns)], scale = TRUE)
结果是:
svd(x,nu = 0)中的错误:'x'
中的无限或缺失值
这有很多问题,首先是你如何解决这个问题?其次,如何浏览我的数据以确保正确处理或替换缺失值?事实上我的数据是data.frame而不是导致问题的矩阵吗?
我不知道如何附加CSV文件,但这里是文件的前几行(有241行):
Date Returns Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 Var12 Var13 Var14 Var15 Var16 Var17 Var18 Var19 Var20 Var21 Var22 Var23 Var24 Var25 Var26 Var27 Var28 Var29 Var30 Var31 Var32 Var33 Var34 Var35 Var36 Var37 Var38 Var39 Var40 Var41 Var42 Var43 Var44 Var45 Var46 Var47 Var48 Var49 Var50 Var51 Var52 Var53 Var54 Var55 Var56 Var57 Var58 Var59 Var60 Var61
6/30/2014 0.48 18.12 9.44 107.43 19.53 1.92 11.54 0.99 3.33 98.83 0.44 2.59 3.42 105.15 308.59 80.44 1.36 0.94 102.07 1.69 331.47 53656.02 21897.39 11022.87 23144.90 15131.80 0.59 2.70 1.35 0.58 0.33 0.25 103.38 1.67 2.59 3.42 1.75 0.10 1.09 2.00 -0.11 1.24 2.08 0.22 138780.00
5/31/2014 1.52 17.63 9.44 107.18 14.36 1.96 12.48 1.01 3.49 98.60 0.37 2.55 3.39 101.79 306.79 79.96 1.37 0.93 101.84 1.68 324.69 53122.21 21159.31 10558.07 22584.93 14343.14 0.59 2.62 1.40 0.52 0.41 0.11 103.39 1.58 2.55 3.39 1.81 0.09 1.11 1.96 -0.07 1.15 2.29 0.47 3.50 1.49 138492.00 171.04 11302.80 4322654.00 55.40 -44.39 441.59 1000.70 117.44 11.60 6.50 1.50 0.50
4/30/2014 1.07 17.40 9.45 107.11 22.93 1.96 14.20 1.02 3.49 98.24 0.40 2.69 3.52 102.03 308.63 79.85 1.38 0.93 102.51 1.67 323.24 51470.08 21660.07 10399.85 22598.44 14475.33 0.61 2.67 1.53 0.53 0.47 0.06 103.47 1.69 2.69 3.52 1.82 0.09 1.49 2.08 0.02 1.16 2.04 -4.63 0.04 3.50 1.42 138268.00 171.58 11227.50 4296049.00 54.90 -47.04 425.02 204.90 117.57 11.60 27.30 6.60 1.80 1.40
3/31/2014 0.50 17.51 9.51 106.40 25.98 1.95 14.84 1.09 3.65 98.40 0.38 2.72 3.62 100.51 303.49 79.87 1.38 0.91 102.36 1.66 316.98 47046.98 20839.70 10097.38 21980.77 14694.83 0.61 2.72 1.59 0.52 0.48 0.04 103.44 1.63 2.72 3.62 1.99 0.08 1.73 2.10 0.00 1.13 2.02 0.91 3.30 1.20 137964.00 171.47 11169.00 4226971.00 53.70 -44.18 452.77 608.80 117.39 11.70 15.10 27.30 6.80 1.60 0.20
2/28/2014 1.76 17.10 9.52 106.27 25.35 1.96 15.47 1.13 3.88 98.46 0.31 2.70 3.66 100.68 294.91 80.44 1.37 0.90 102.12 1.66 315.92 47367.89 20039.38 10048.23 22188.31 14617.57 0.60 2.74 1.66 0.44 0.44 0.01 103.45 1.50 2.69 3.66 2.16 0.07 1.82 2.10 -0.05 1.04 1.87 0.91 3.10 1.08 137761.00 169.34 11133.50 4159972.00 53.20 -42.59 383.36 -48.40 116.28 11.70 27.30 6.90 1.70 1.70
答案 0 :(得分:1)
看起来您的数据存在某些日期缺少值的问题,因此您必须进行一些数据清理。下面的代码是您如何为您提供的行执行此操作的示例。只有两个日期似乎是完整的,所以继续进行PCA分析并没有多大意义。
我已经将您输入的数据从上面加载到变量xx中。
xx <- sub("\n"," ",xx) # delete \n in data
xy <- unlist(strsplit(xx,split=" ")) # change string to character vector
start_of_new_date <- grep("[0-9]/[0-9]{2}/2014",xy) # find start of new dates in data
diff(start_of_new_date) # notice that the number of values between dates are not all 62 so some lines are missing values
ar <- matrix(c(c("Date", xy[1:61]), xy[168:291]), nrow=3,byrow=TRUE ) # convert only complete dates, March and April, to matrix
df <- data.frame(Date=ar[2:3,1], ar[2:3,2:62], stringsAsFactors=FALSE) # convert dates and data to data frame
colnames(df) <- c("Date",ar[1,2:62]) # make var strings column names in data frame
df[,2:62] <- sapply(df[,2:62], as.numeric) # convert data columns from character to numeric
dfs <- scale(df[,2:62]) # example only; running scale on two row data columns is meaningless since all will scale to same values
答案 1 :(得分:0)
Error in svd(x, nu = 0) : 0 extent dimensions
可能重复在以下日志转换后可以替换负无穷大值。
// Then, define your class with it's annotated Fields
class MyClass {
@MyAnnot(used = "Hey", type = "There")
String fielda
@MyAnnot(used = "denn", type = "Ton")
String fieldc
}
def findAllPropertiesForClassWithAnotation(obj, annotClass) {
def op = []
def annos = []
def i = 0
obj.properties.findAll { prop ->
obj.getClass().declaredFields.find {
it.name == prop.key && annotClass in it.declaredAnnotations*.annotationType()
annos=it.declaredAnnotations
i++
if(annos)
op << annos[0] as Set
// println"Props ${annos[0]}"
}
}
op.each{ println "${it} and i is ${i}"}
}
// Then, define an instance of our class
MyClass a = new MyClass(fielda: 'tim', fieldc: 'dennisStar')
// And print the results of calling our method
println findAllPropertiesForClassWithAnotation(a, MyAnnot)