在 R 中使用 if 循环重新编码项目文件

问题描述 投票:0回答:1

我是一名大学生,最近开始学习使用 R 进行统计分析代码。 不幸的是我还不是最好的,我的教授。并不是真的愿意帮忙。这就是为什么我希望你们中有人知道我的问题的答案: 我做错了什么?我的目标是以相反的方式重新编码项目,以便 1=5, 2=4, ... 我认为通过 if 循环我可以重新编码这些项目,但脚本不会运行。

作为背景,我们做了一项调查,其中包括实验操作并包含问题,这些问题都朝着积极和消极的方向发展。为了将各个问题添加到一个索引中(以便我可以操作该结构),我想首先将它们朝同一方向极点。

这是我想出的代码。 mig 代表数据集。 #comments 是德语的,只是出于结构原因。 而且 t 检验不起作用。

如果有人知道我如何改进代码以使其运行,我将永远感激不已。 :) 提前谢谢大家,非常感谢!!!

library(tidyverse)
library(report)
#Datensatz einlesen:
mig <- readxl::read_excel("data/data_ExperimentMigration2024_2024-07-04_20-34.xlsx")

#versuch Items umzupolen:
mig |>
  mutate(ME03_02_rec = if_else(ME03_02 == 1 | ME03_02 == 2 | ME03_02 ==3 | ME03_02 ==4 | ME03_02 == 5, "1=5", "2=4", "3=3", "4=2", "5=1"))

#Items umpolen
mig |> #Asylsuchende nehmen Deutschen die Arbeitsplätze weg.
  mutate(
    ME03_02 = if_else(ME03_02 == 1, 1=5, NA),
    ME03_02 = if_else(ME03_02 == 2, 2=4, NA),
    ME03_02 = if_else(ME03_02 == 3, 3=3, NA),
    ME03_02 = if_else(ME03_02 == 4, 4=2, NA),
    ME03_02 = if_else(ME03_02 == 5, 5=1, NA)
    )
mig |> #Zuwanderung verschlimmert die Wohnungsknappheit.
  mutate( ME03_01 = if_else(ME03_01 == 1, 1=5, NA),
          ME03_01 = if_else(ME03_01 == 2, 2=4, NA),
          ME03_01 = if_else(ME03_01 == 3, 3=3, NA),
          ME03_01 = if_else(ME03_01 == 4, 4=2, NA),
          ME03_01 = if_else(ME03_01 == 5, 5=1, NA)
  )
mig |> #Flucht vor Armut ist weniger legitim als Flucht vor Krieg oder aus politischen Gründen.
  mutate( ME03_04 = if_else(ME03_04 == 1, 1=5, NA),
          ME03_04 = if_else(ME03_04 == 2, 2=4, NA),
          ME03_04 = if_else(ME03_04 == 3, 3=3, NA),
          ME03_04 = if_else(ME03_04 == 4, 4=2, NA),
          ME03_04 = if_else(ME03_04 == 5, 5=1, NA)
  )
mig |> #Zuwanderung wirkt sich negativ auf die Wirtschaft aus.
  mutate( ME03_09 = if_else(ME03_09 == 1, 1=5, NA),
          ME03_09 = if_else(ME03_09== 2, 2=4, NA),
          ME03_09 = if_else(ME03_09 == 3, 3=3, NA),
          ME03_09 = if_else(ME03_09 == 4, 4=2, NA),
          ME03_09 = if_else(ME03_09 == 5, 5=1, NA)
  )

#Items Umpolen?
mig <- mig |>
  mutate(
    ME03_02 = recode(ME03_02, `1` = 5, `2` = 4, `3` = 3, `4` = 2, `5` = 1),
    ME03_01 = recode(ME03_01, `1` = 5, `2` = 4, `3` = 3, `4` = 2, `5` = 1),
    ME03_04 = recode(ME03_04, `1` = 5, `2` = 4, `3` = 3, `4` = 2, `5` = 1),
    ME03_09 = recode(ME03_09, `1` = 5, `2` = 4, `3` = 3, `4` = 2, `5` = 1)
  )

#Index Bilden
einst_index <- mig |>
  select(ME03_01, ME03_02, ME03_03, ME03_04, ME03_05, ME03_07, ME03_09, ME03_10) |>
  rowMeans(na.rm = TRUE)
#index zum datensatz hinzufügen:
mig<- mig
  mutate(einst_index = einst_index)
#Mittelwert&sd
mig |>
  summarise(
    mean(einst_index, na.rm = TRUE), sd(einst_index, na.rm=TRUE)
  )

#T-Test für unabhängige Stichproben
# Einst_index x neutraler Stimulus:
t.test(mig$einst_index, mig$EM03, paired = TRUE) |>
  report_table()
#Einst_index x positiver Stimulus:
t.test(mig$einst_index, mig$EM02, paired = TRUE) |>
  report_table()
#Einstellung_index x negativer Stimulus:
t.test(mig$einst_index, mig$EM01, paired = TRUE) |>
  report_table()
r if-statement recode
1个回答
0
投票

您想重新编码原始变量,以便 5 = 1、4 = 2 等。您的新变量是旧变量的函数,因此您不需要循环或

if_else
语句,您只需计算新值:

old <- 1:5
new = old*-1 + 6
cbind(old, new)
#>      old new
#> [1,]   1   5
#> [2,]   2   4
#> [3,]   3   3
#> [4,]   4   2
#> [5,]   5   1

创建于 2024-07-08,使用 reprex v2.1.0

请注意,您的

if_else
语句是错误的,第二个参数应该是当条件(第一个参数)为TRUE时要分配给目标变量的
,而不是赋值,实际上它会抛出一个错误:

library(dplyr)
old <- 1:5
new = if_else(old == 1, 1 = 5, NA)
#> Error: <text>:3:27: unexpected '='
#> 2: old <- 1:5
#> 3: new = if_else(old == 1, 1 =
#>                              ^

创建于 2024-07-08,使用 reprex v2.1.0

不过,这是幸运的,因为如果不是这样,所有非 1 的值最终都会得到 NA:这就是你在第二个参数中所要求的。

如果你想坚持使用类似

if_else
的方法,你最好看看
case_when()
函数,它更适合当你有多个条件时:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
df <- tibble(old = 1:5)
df <-  mutate(df, new = case_when(
  old == 1 ~ 5,
  old == 2 ~ 4,
  old == 3 ~ 3,
  old == 4 ~ 2,
  old == 5 ~ 1))
print(df)
#> # A tibble: 5 × 2
#>     old   new
#>   <int> <dbl>
#> 1     1     5
#> 2     2     4
#> 3     3     3
#> 4     4     2
#> 5     5     1

创建于 2024-07-08,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.