1

私は最も単純なことのいくつかに戸惑います。次のコードでは、「a」という data.frame の 1 つの列の一部だけを抽出したいと考えています。私は正しい値を取得しますが、最終的なエンティティには望ましくない NA が埋め込まれています。「b」は抽出された列、「c」はデータの正しい部分ですが、最後に余分な NA パディングがあります。

「c」が自然に 9 要素しかない場合、これをどのように行うのが最善ですか? (つまり、元の 15 からスキップした 6 を差し引いたもの)

NumBars = 6
a = as.data.frame(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))
a[,2] = c(11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
names(a)[1] = "Data1"
names(a)[2] = "Data2"

{Use 1st column of data only}

b = as.matrix(a[,1])
c = as.matrix(b[NumBars+1:length(b)])
4

3 に答える 3

4

NA を取得している直接の理由は、 R 言語の定義に詳述されているように、シーケンス演算子: が加算演算子よりも優先されるためです。したがって、 と同じではありません。1 つ目はvectorに追加し、2 つ目は最初に追加してからシーケンスを取得します。+NumBars+1:length(b)(NumBars+1):length(b)NumBars1:length(b)

ind.1 <- 1+1:3   # == 2:4
ind.2 <- (1+1):3 # == 2:3 

b[length(b)+1]このより長いベクトルでインデックスを作成すると、必要なすべての要素が取得され、R 言語定義が返す と伝えているのようなエントリも求められますNA。そのため、末尾にNA's があります。

iが正で を超える場合length(x)、対応する選択はNAです。の範囲外の値が負の場合i、エラーが発生します。

b <- c(1,2,3)
b[ind.1] 
#[1] 2 3 NA
b[ind.2] 
#[1] 2 3

設計の観点から、ここにリストされている他のソリューションは、この間違いを回避するのに役立つ適切な選択です。

于 2013-05-06T18:41:00.260 に答える
0

ベクトル/行列から何を削除したいかを考える方が簡単な場合がよくあります。項目を削除するには、負の添え字を使用します。

c = as.matrix(b[-1:-NumBars])
c
##      [,1]
## [1,]    7
## [2,]    8
## [3,]    9
## [4,]   10
## [5,]   11
## [6,]   12
## [7,]   13
## [8,]   14
## [9,]   15
于 2013-05-06T18:34:09.223 に答える
0

目標がNA列から s を削除することである場合は、次のようなこともできます

c <- na.omit(a[,1])

例えば

> x
[1]  1  2  3 NA NA
> na.omit(x)
[1] 1 2 3
attr(,"na.action")
[1] 4 5
attr(,"class")
[1] "omit"

属性は無視できます。属性は、どの要素が削除されたかを知らせるために存在します。

于 2013-05-06T18:38:37.020 に答える