R中的矢量化计算

时间:2017-06-23 21:47:16

标签: r

我在R中做了一些计算,并且被R使用的逻辑搞糊涂了。

例如,

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

在这里,我将创建第三列“c”

如果列a包含NA,则列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 [3] =表$ a [2] +表$ b [2]

当我希望它为table $ c [3] = table $ a [3] + table $ b [3]。

我认为R会跳过左侧和右侧的索引编号2并跳转到计算中的索引3,但实际上,R在左侧跳过索引编号2但在右侧没有跳过编号2。 ..

为什么会这样?我该如何防止这种情况?

谢谢。

2 个答案:

答案 0 :(得分:2)

使用

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

如果你只是开始学习R,那就更简单了:

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

为了防止像你这样的事情,请不要让R同时做两件事:


map2.insert(map1.begin(), map1.end());
std::swap(map1, map2);

你基本上要求R检查c是否包含NA&#39;在运行中&#39;并且它不是R的工作方式。

答案 1 :(得分:0)

或者,您可以使用There are 4 items 1 a 2 b 3 c d 4 e f g h There are 0 items There are 3 items 1 This is the first 2 second item 3 and now the third

data.table