2017-06-23 14 views
0

私はRで何らかの計算をしていましたが、ロジックRの使用法では混乱していました。例えばRのベクトル化された計算

列aはNAが含まれている場合は、

ここ
table <- data.frame(a = c(1,NA,2,1), b= c(1,1,3,2)) 

、私は3列目の "C" を作成するつもりです

列Cは0になります。それ以外の場合は、列aと列bが加算されます。

ので、列cが

C(2,0,5,3)

私が書いたようになります。

table$c <- 0 
table$c[!is.na(table$a)] <- table$a + table$b 

を私は

として列cを持っています

c(2,0、NA、5)

私はそれがテーブルの$ Cになりたいと思ったときに、私は[その

テーブルの$ C [3] =テーブルの$ A [2] +テーブルの$ B [2]

参照3] =テーブル$ a [3] +テーブル$ b [3]。

Rは、左右でインデックス番号2をスキップして計算ではインデックス3にジャンプすると考えましたが、実際にはRは2番目のインデックス番号をスキップしましたが、右側の2番目はスキップしませんでした...

どうしてですか?これをどうしたらいいですか?

ありがとうございます。

答えて

2

使用

table$c <- apply(table, 1, sum) 
table$c[is.na(table$c)] <- 0 

またはそれ以上の単純なだけ学習を開始場合R:

で2つのことを行うためにRを聞かないで、あなたのケースでのようなものを防止するために
table$c <- table$a + table$b 
table$c[is.na(table$c)] <- 0 

ここのように同じ時間:

table$c[!is.na(table$a)] <- table$a + table$b 

あなたは基本的にC「はその場で」NAが含まれているかどうかをチェックするためにRを尋ね、そしてRは仕事がどのようにそうではありませんing。

0

また、あなたはdata.tableパッケージを利用することができ

library(data.table) 
table <- data.table(a = c(1,NA,2,1), b= c(1,1,3,2))#creates the data table structure 
table[,c:=ifelse(is.na(a),0,a+b)]#creates the column c based on the condition 

> table 
    a b c 
1: 1 1 2 
2: NA 1 0 
3: 2 3 5 
4: 1 2 3 
関連する問題