如果我try 通过一步添加3个布尔函数来在R rame中创建新列,则会导致布尔值而不是integer值.如果我使用中间步骤首先为3个布尔表达创建列,我可以将它们相加并获得一个整元.我不明白为什么两组代码会产生不同的结果.

#The input is a dataframe with 3 variables that are sometimes missing
#and sometimes not.
subjid <- c(101,102,103,104,105,106,107,108)
var1 <- c(1,2,3,4,NaN,NaN,NaN,NaN)
var2 <- c(1,2,NaN,NaN,5,6,NaN,NaN)
var3 <- c(1,NaN,3,NaN,5,NaN,7,NaN)
df <- data.frame(subjid, var1, var2, var3)
df
subjid var1 var2 var3
1    101    1    1    1
2    102    2    2  NaN
3    103    3  NaN    3
4    104    4  NaN  NaN
5    105  NaN    5    5
6    106  NaN    6  NaN
7    107  NaN  NaN    7
8    108  NaN  NaN  NaN
#This code was intended to count how many of the 3 variables were nonmissing
#But it produces an unexpected result
df$nonmissing_count_a <- !is.na(df$var1) + !is.na(df$var2) + !is.na(df$var3)
table(df$nonmissing_count_a)
FALSE  TRUE
5     3
#This code is intended to obtain the same count of nonmissing variables
#And it works as expected
df$var1_nonmissing <- !is.na(df$var1)
df$var2_nonmissing <- !is.na(df$var2)
df$var3_nonmissing <- !is.na(df$var3)
df$nonmissing_count_b <- df$var1_nonmissing + df$var2_nonmissing + df$var3_nonmissing
table(df$nonmissing_count_b)
0 1 2 3
1 3 3 1

推荐答案

它发生是因为operator precedence(见?Syntax),try 一下

table((!is.na(df$var1)) + (!is.na(df$var2)) + (!is.na(df$var3)))

0 1 2 3 
1 3 3 1

加法+比否定!具有更高的优先级

请记住,您实际上期望通过计数或添加1和0(数字)来获得输出

table(as.numeric(!is.na(df$var1)) + 
      as.numeric(!is.na(df$var2)) + 
      as.numeric(!is.na(df$var3)))

0 1 2 3 
1 3 3 1

或者try rowSums

table(rowSums(!is.na(df[,-1])))

0 1 2 3 
1 3 3 1

R相关问答推荐

在与ggplot 2和网格的最佳匹配线上绘制箭头

了解.groups的目的= dØr的摘要功能中的删除

geom_raster不适用于x比例中超过2,15的值

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

基于R中的GPS点用方向箭头替换点

混淆矩阵,其中每列和等于1

R等效于LABpascal(n,1)不同的列符号

向gggplot 2中的数据和轴标签添加大写和星号

查找图下的面积

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

如果行和大于值,则过滤

如何在Chart_Series()中更改轴值的 colored颜色 ?

绘制采样开始和采样结束之间的事件

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

如何在科学记数法中显示因子

在点图上绘制置信度或预测区间ggplot2

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

如何使用FormC使简单算术运算得到的数字是正确的?