我试图分析一个来自Stata背景的R数据集。
我有33个问题(标题为Q1到Q33),并试图通过这些问题,而不仅仅是使用一长行代码将它们添加到一起。我也知道缺失的数据,并已将其转换为0,但也想在计算平均得分时计算它们的流行率。
分数计算似乎有效,但缺失计算无效,它警告我,
在if(QN == 0){.:条件的长度> 1,并且只使用第一个元素
我的代码
library(readxl)
df <- read_excel("MICRO DATASET EDITING.xlsx")
#Convert All Columns to Integers, ignore errors those are NAs
df[] <- lapply(df, function(x) as.numeric(replace(x, is.na(x), 0)))
View(df)
###Calculate Total Scores###
Score <- 0
NumAnswered <- 33
Missing <- 0
for (x in 1:33) {
QVal <- df[[paste("Q", x, sep = "")]]
Score <- Score + QVal
ifelse(QVal == 0, Missing <- Missing + 1)
}
df$Score <- Score
df$Missing <- Missing
我在网上看到这可能是由于if语句,所以我将其更改为
for (x in 1:33) {
QVal <- df[[paste("Q", x, sep = "")]]
Score <- Score + QVal
ifelse(QVal == 0, Missing <- Missing + 1)
}
df$Score <- Score
df$Missing <- Missing
但这仍然是不正确的(它说所有的答案都不见了,即使分数已经被正确地计算出来)
1条答案
按热度按时间yruzcnhs1#
R
适用于矢量化操作和表格数据,这样可以避免循环。R
有两种主要的“方言”:baseR
和tidyverse
(它们并不互相排斥!)。下面是一个例子,说明如何在这两个方面实现你所需要的,但还有其他方法。注意:
|>
是管道操作符(我认为是在R 4.2
中引入的)。它接受它左边的任何内容,并将其插入到它右边的表达式 * 作为它的第一个参数 *,因此mean(x, na.rm=TRUE)
等效于x |> mean(na.rm=TRUE)
。R
方式:tidyverse
方式:要直接计算平均得分,可以使用
rowMeans(na.rm=TRUE)
。