【问题标题】:Exclude a Specific Value from a Unique Value Counter从唯一值计数器中排除特定值
【发布时间】:2015-06-02 19:35:19
【问题描述】:

我正在尝试计算一个人在试验试验期间给出了多少不同的反应,但有一个问题。

应该有 6 种可能的响应 (1,2,3,4,5,6) 但有时将 0 记录为响应(这是设计中的故障/缺陷)。

我需要计算他们给出的不同响应的数量,但只计算 1-6 范围内的唯一值。这有助于我们计算它们的准确性。

有没有办法排除值 0 对唯一值计数器的贡献?还有其他解决方法吗?

目前我在下面尝试这种方法,但它包括 0、NA,并且我认为唯一值计数器列(我已命名为“Span6”)的单元格中的任何其他条目,其中让我难过。

# My Span6 calculator:
ASixImageTrials <- data.frame(eSOPT_831$T8.RESP, eSOPT_831$T9.RESP, eSOPT_831$T10.RESP, eSOPT_831$T11.RESP, eSOPT_831$T12.RESP, eSOPT_831$T13.RESP)
ASixImageTrials$Span6 = apply(ASixImageTrials, 1, function(x) length(unique(x)))

【问题讨论】:

标签: r unique


【解决方案1】:

在唯一和求和逻辑向量中使用na.omit,如下所示

df$res = apply(df, 1, function(x) sum(unique(na.omit(x)) > 0))
df

输出:

   X1 X2 X3 X4 X5 res
1   2  1  1  2  1   2
2   3  0  1  1  2   3
3   3 NA  1  1  3   2
4   3  3  3  4 NA   2
5   1  1  0 NA  3   2
6   3 NA NA  1  1   2
7   2  0  2  3  0   2
8   0  2  2  2  1   2
9   3  2  3  0 NA   2
10  0  2  3  2  2   2
11  2  2  1  2  1   2
12  0  2  2  2 NA   1
13  0  1  4  3  2   4
14  2  2  1  1 NA   2
15  3 NA  2  2 NA   2
16  2  2 NA  3 NA   2
17  2  3  2  2  2   2
18  2 NA  3  2  2   2
19 NA  4  5  1  3   4
20  3  1  2  1 NA   3

数据:

set.seed(752)
mat <- matrix(rbinom(100, 10, .2), nrow = 20)
mat[sample(1:100, 15)] = NA
data.frame(mat) -> df
df$res = apply(df, 1, function(x) sum(unique(na.omit(x)) > 0))

【讨论】:

  • 谢谢帕夫努西!我将使用这种方法。今天你是我的英雄。
  • 或使用library(reshape2);rowSums(table(melt(as.matrix(df))[c(1,3)])[,-1]!=0)
【解决方案2】:

您能否编辑您的问题并说明为什么这不能解决您的问题?

# here is a numeric vector with a bunch of numbers
mtcars$carb

# here is how to limit that vector to only 1-6
mtcars$carb[ mtcars$carb %in% 1:6 ]

# here is how to tabulate that result
table( mtcars$carb[ mtcars$carb %in% 1:6 ] )

【讨论】:

  • 太棒了!感谢您的快速帮助。这绝对是一个可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多