在SPSS中,您可以计算针对最少问题数量的案例的方法。在SPSS中我会输入
COMPUTE compvar = MEAN.4(var1,var2,var3,var4,var5,var6,var7)。
这将仅为具有4个或更多数组var1-var7的值的情况生成新变量(即compvar)。这就是.4在命令中所做的事情,在命令运行之前设置最小数量的响应。
关于在R中执行此操作的任何提示,我可以停止跳转到SPSS?
答案 0 :(得分:3)
据我所知,还没有内置功能 - 您可以试试这个功能:
mycolmeans<-function(df,n){
holding<-colMeans(df,na.rm=TRUE)
holding[n > as.vector(colSums(!is.na(df)))]<-NA
holding
}
这假设您有一个数据框保存您的值在列中,并且您希望在它有太多缺失值时返回NA,这些缺失值表示为NA。
x <- structure(list(a = c(1, 2, 3, 4, 5, 6), b = c(NA, NA, 3, 4, 5,
6)), .Names = c("a", "b"), row.names = c(NA, -6L), class = "data.frame")
mycolmeans(x,4)
mycolmeans(x,6)
答案 1 :(得分:2)
这可能代表一种可能性:
compvar <- sapply(1:nrow(df),function(x) ifelse(sum(!is.na(df[x,])*1)>=4, mean(as.numeric(df[x,]),na.rm=TRUE),NA))
我假设您的数字数据存储在数据框df
中。输出是长度为nrow的向量compvar
,其中包含df
中相应行的平均值,或者如果该行中少于四个非NA条目,则包含NA
。 / p>
答案 2 :(得分:1)
我们假设您有一个包含5个变量的data.frame
df <- data.frame(
var1 = sample(c(NA,rnorm(5)),50,replace = TRUE),
var2 = sample(c(NA,rnorm(5)),50,replace = TRUE),
var3 = sample(c(NA,rnorm(5)),50,replace = TRUE),
var4 = sample(c(NA,rnorm(5)),50,replace = TRUE),
var5 = sample(c(NA,rnorm(5)),50,replace = TRUE)
)
我会先计算每一行的平均值。以下命令计算每一行的平均值,忽略该行具有NA(SPSS中为99或简称为#34;缺少&#34;)值。
df$compvar <- rowMeans(df, na.rm = TRUE)
然后我会设置NA的数量大于X的响应(在本例中为1)。这会将data.frame转换为TRUE FALSE字段,您可以将其设置为简单的rowSum,并设置为条件。
df[rowSums(sapply(df, is.na)) > 1,]$compvar <- NA
您应该查看以下各项,以了解每一步提供的内容:
sapply(df, is.na)
rowSums(sapply(df, is.na))
rowSums(sapply(df, is.na)) > 1
df[rowSums(sapply(df, is.na)) > 1,]
作为一个功能,这可以写成:
#' Row means with minimum response
#'
#' Emulates SPSS MEAN.X functionality
#' @param df A data.frame
#' @param x The number of responses required per row.
#' @export
meanx <- function(df,x) {
df$compvar <- rowMeans(df, na.rm = TRUE)
df[rowSums(sapply(df, is.na)) > x,]$compvar <- NA
return(df)
}
答案 3 :(得分:0)
请参阅sjmisc-package中的mean_n()
。
mean_n(data, 4)