计算响应R

时间:2015-06-29 18:58:05

标签: r spss

在SPSS中,您可以计算针对最少问题数量的案例的方法。在SPSS中我会输入

COMPUTE compvar = MEAN.4(var1,var2,var3,var4,var5,var6,var7)。

这将仅为具有4个或更多数组var1-var7的值的情况生成新变量(即compvar)。这就是.4在命令中所做的事情,在命令运行之前设置最小数量的响应。

关于在R中执行此操作的任何提示,我可以停止跳转到SPSS?

4 个答案:

答案 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)