无法遍历R中向量子集的值

雷米希斯

如果这个问题确实很基础,我深表歉意,我仍然是R的新手。

在我的数据集中,观察结果来自被问到在6个月内每月满意度从1到10的人。

没有参与的义务,因此有时他们回答,有时则没有。

我正在尝试建立一个变量,计算他们回答问题的次数。我认为如果答案> 0,他们就会回答。

因此,首先我从数据集中选择了相关变量,并将它们存储到一个单独的数据框中(不要注意名称中的“平均值”,就这个问题而言,只需考虑它是该月的唯一答案即可):

monthly_sats <- select (donnees, average_satisfaction_march, average_satisfaction_april, 
                        average_satisfaction_may, average_satisfaction_june, 
                            average_satisfaction_july, average_satisfaction_august)

然后,我创建了一个变量,用于存储每个人回答多少次(因此,多少个月),并将其初始化为0。

donnees$monthly_sat_count <- 0

到现在为止还挺好。然后,我写了以下内容:

for (i in monthly_sats) {
  for(j in i) {
    if (j > 0) {
      donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
    }
  }
}

这就是我的意思:对于monthly_sats数据框中的每个变量,如果这些变量中的每个值都大于0,则将“ donnees”数据集中的monthly_sat_count变量增加1。

我希望对于数据集中的每一行,monthly_sat_counts都会告诉您这些变量中有多少个大于0。

结果是monthly_sat_counts的每一行都等于365,我不知道为什么。

请注意,我还尝试了子集而不是选择,结果是完全相同的。这是代码:

for (i in donnees[c("average_satisfaction_march", "average_satisfaction_april",
                        "average_satisfaction_may", "average_satisfaction_june",
                            "average_satisfaction_july", "average_satisfaction_august")]) {
  for(j in i) {
    if (j > 0) {
      donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
    }
  }
}

如果我删除第二个for循环,只需使用下面的代码循环遍历向量列表,则monthly_sat_count始终等于0:

for (i in donnees[c("average_satisfaction_march", "average_satisfaction_april",
                    "average_satisfaction_may", "average_satisfaction_june",
                        "average_satisfaction_july", "average_satisfaction_august")]) {
  if (i > 0) {
    donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
}

我不知道为什么要这么做,而且我什至不知道从哪里开始调试,因为我仍然很难理解R。我的唯一编程背景是前一段时间的C#。

无论如何,如果有时可以向我解释为什么它不起作用,并向我展示一种更好的方法,那真的会让我感到高兴!

伦尼
set.seed(123)
df <- as.data.frame(matrix(sample(c(0:10), 60, TRUE), ncol = 6))
colnames(df) <- wrapr::qc(average_satisfaction_march, average_satisfaction_april, 
               average_satisfaction_may, average_satisfaction_june, 
               average_satisfaction_july, average_satisfaction_august)

df$donnees <- c(1:10)
df <- df[,c(7,1:6)] 

df$timesanswered <- apply(df[,2:7], 1 , function(x) {length(x[x>0])})

首先,我创建了一些样本数据。最后一行是用于计算每个月的满意度的代码不为零的代码。我假设您描述数据的方式没有缺失值,但是当donnee没有回答问题时会填零。

您可以分别用average_satisfaction_march和average_satisfaction_august的列号替换2和7。无需创建单独的数据框即可执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章