我在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。 ..
为什么会这样?我该如何防止这种情况?
谢谢。
答案 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