从唯一值计数器中排除特定值
Exclude a Specific Value from a Unique Value Counter
我正在尝试计算一个人在一次实验中给出了多少种不同的反应,但是有一个问题。
应该有 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)))
您能否编辑您的问题并说明为什么这不能解决您的问题?
# 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 ] )
使用 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))
我正在尝试计算一个人在一次实验中给出了多少种不同的反应,但是有一个问题。
应该有 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)))
您能否编辑您的问题并说明为什么这不能解决您的问题?
# 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 ] )
使用 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))