这是另一个与 SPSS 中的 COUNT 命令最接近的直接解决方案 -创建一个新变量,针对每种情况(即行)计算给定值或值列表在变量列表中的出现次数。
#Let df be a data frame with four variables (V1-V4)
df <- data.frame(V1=c(1,1,2,1,NA),V2=c(1,NA,2,2,NA),
V3=c(1,2,2,1,NA), V4=c(NA, NA, 1,2, NA))
#This is how to compute a new variable counting occurences of value "1" in V1-V4.
df$count.1 <- apply(df, 1, function(x) length(which(x==1)))
更新后的数据框包含新变量 count.1,与 SPSS COUNT 命令完全一样。
> df
V1 V2 V3 V4 count.1
1 1 1 1 NA 3
2 1 NA 2 NA 1
3 2 2 2 1 1
4 1 2 1 2 2
5 NA NA NA NA 0
您可以执行相同的操作来计算值“2”在 V1-V4 中每行出现的次数。请注意,您需要在 df 中选择应用该函数的列(变量)。
df$count.2 <- apply(df[1:4], 1, function(x) length(which(x==2)))
您还可以应用类似的逻辑来计算V1-V4中缺失值的数量。
df$count.na <- apply(df[1:4], 1, function(x) sum(is.na(x)))
最终结果应该正是您想要的:
> df
V1 V2 V3 V4 count.1 count.2 count.na
1 1 1 1 NA 3 0 1
2 1 NA 2 NA 1 1 2
3 2 2 2 1 1 3 0
4 1 2 1 2 2 2 0
5 NA NA NA NA 0 0 4
该解决方案可以很容易地推广到一系列值。假设我们要计算每行 V1-V4 中出现值 1或2 的次数:
df$count.1or2 <- apply(df[1:4], 1, function(x) sum(x %in% c(1,2)))