R中的子集化错误

时间:2014-06-08 02:08:37

标签: r subset

我有一个名为dataframe的大dualbeta,其中包含2行和6080列。这是一个示例:

row.names     A.Close   AA.Close    AADR.Close  AAIT.Close  AAL.Close
1   upside    1.253929  0.9869027   0.6169613   0.6353903   0.1782124
2   downside  1.027412  1.1936236   0.5915299   0.5697878   0.1702382

我正在尝试仅提取upside&gt; = 1.00的那些以及downside&lt; = 1.00的那些。我使用combinations <- subset(dualbeta, upside>=1.00 & downside<=1.00),但我得到以下内容:

row.names   A.Close     AA.Close     AADR.Close  AAIT.Close 
1 NA          NA          NA            NA          NA  
2 NA.1        NA          NA            NA          NA  
3 NA.2        NA          NA            NA          NA  
4 NA.3        NA          NA            NA          NA  
5 NA.4        NA          NA            NA          NA  
...

它应该只返回一个2 by x表,其中x是找到的组合数。我不知道为什么我会得到一堆行?另外,我认为我在NA中有dualbeta个值,因此我使用na.omit(dualbeta)->dualbeta但它删除了所有内容已将dualbeta变为0 by 6080。我还使用了返回which(is.na(dualbeta))3307的{​​{1}},但是当我检查这些列时,它们不包含NA。

2 个答案:

答案 0 :(得分:2)

您可以处理数据的转置,以便选择具有适当特征的行(转置中的列):

# Fix up the data, use proper row names
rownames(x) <- x$row.names
# Remove old row name column
x <- x[-1]

# transpose and subset
subset(data.frame(t(x)), upside > 1 & downside < 1)

此表达式返回示例数据的零长度结果。更改参数会显示返回的内容:

subset(data.frame(t(x)), upside > .6 & downside < .6)
##               upside  downside
## AADR.Close 0.6169613 0.5915299
## AAIT.Close 0.6353903 0.5697878

答案 1 :(得分:0)

您可以使用简单的索引编制数据。

假设这是您的数据

dualbeta<-data.frame(matrix(runif(24,0,2), 
    nrow=2, 
    dimnames=list(c("upside","downside"), letters[1:12])))

然后你可以用

提取
dualbeta[, dualbeta[1,]>=1.00 & dualbeta[2,]<=1.00]