我正试图仅对我的参与者数据的子集进行反向重新编码(例如,1到5,5到1,等等),同时保留所有行:对于那些表示母语为英语的人.由于我的数据集相当大,我希望避免将其分为两个数据集(第一语言为英语的人,以及那些第一语言为其他第一语言的人),然后try 将参与者ID的结果复制粘贴到一个数据帧中.

这里有一个小例子来说明这一点:

data1 <- data.frame(primary_school=c(1,2,1,3,4,5,2,1,2,1,3,1,3,3,1,1,4,2,5,1), high_school=c(1,2,3,4,5,1,2,1,1,3,1,3,1,2,3,3,4,2,1,2), relatives=c(1,2,3,4,5,5,2,5,5,3,1,3,5,2,3,3,4,2,1,5),home=c(3,2,3,3,4,5,3,3,2,1,3,1,3,3,3,1,3,2,3,3), siblings=c(1,1,1,4,1,1,2,1,1,3,1,1,1,1,1,1,4,2,1,1), Language_A=c("English","English","English","Tamil","French","Malay","Romanian","English","Quechua","Zapotec", "English","English","English","Tamil","French","Malay","Romanian","English","Quechua","Zapotec"),L1=c("English","English","English","Tamil","French","English","English","English","Quechua","Zapotec","English","English","English","Tamil","French","Malay","Romanian","English","Quechua","Zapotec"))

> data1
   primary_school high_school relatives home siblings Language_A       L1
1               1           1         1    3        1    English  English
2               2           2         2    2        1    English  English
3               1           3         3    3        1    English  English
4               3           4         4    3        4      Tamil    Tamil
5               4           5         5    4        1     French   French
6               5           1         5    5        1      Malay  English
7               2           2         2    3        2   Romanian  English
8               1           1         5    3        1    English  English
9               2           1         5    2        1    Quechua  Quechua
10              1           3         3    1        3    Zapotec  Zapotec
11              3           1         1    3        1    English  English
12              1           3         3    1        1    English  English
13              3           1         5    3        1    English  English
14              3           2         2    3        1      Tamil    Tamil
15              1           3         3    3        1     French   French
16              1           3         3    1        1      Malay    Malay
17              4           4         4    3        4   Romanian Romanian
18              2           2         2    2        2    English  English
19              5           1         1    3        1    Quechua  Quechua
20              1           2         5    3        1    Zapotec  Zapotec

我最初try 使用filter,但很快发现它只对L1为英语的人的样本进行子集和拆分(因此满足(!(Language_A =="English" | L1 == "English") ),而我想保留所有行:

testtest<- data1 %>%
  filter(!(Language_A =="English" | L1 == "English")) %>% 
  mutate_at(c("primary_school","high_school", "siblings","relatives","home"), 
           funs(recode(., "1"=5,"2"=4, "3"=3, "4"=2, "5"=1)))

有没有类似的功能可以保存所有的数据?

我也try 了类似下面的方法,但它似乎对我想使用的参数不满意.

testtest<- data1 %>%
  if (Language_A !="English" | L1 != "English"){ 
  mutate_at(c("primary_school","high_school", "siblings","relatives","home"), 
           funs(recode(., "1"=5,"2"=4, "3"=3, "4"=2, "5"=1)))
  } else ()

我看到人们用case_when解决类似的问题,但它似乎主要用于在不同的情况下将一个单一的值变成另一个单一的值.因此,我甚至不确定如何将其应用于在单个情况下Mutations 多个值.

任何 idea 都将不胜感激.谢谢!

推荐答案

我们可以使用across(_at/_all不推荐使用across)来循环那些需要重新编码的列.然后,根据逻辑即.当LANGUAGE_A和L1都不是‘English’时,从6(6-1=5,6-2=4,6-3=3,6-4=2,6-5=1-假设这些列中只有1-5之间的值)中减go 这些值,否则返回列值

library(dplyr)
data1 %>% 
  mutate(across(primary_school:siblings, 
  ~ case_when(!(Language_A =="English" | L1 == "English") ~ 6 - .x, TRUE ~ .x)))

-输出

primary_school high_school relatives home siblings Language_A       L1
1               1           1         1    3        1    English  English
2               2           2         2    2        1    English  English
3               1           3         3    3        1    English  English
4               3           2         2    3        2      Tamil    Tamil
5               2           1         1    2        5     French   French
6               5           1         5    5        1      Malay  English
7               2           2         2    3        2   Romanian  English
8               1           1         5    3        1    English  English
9               4           5         1    4        5    Quechua  Quechua
10              5           3         3    5        3    Zapotec  Zapotec
11              3           1         1    3        1    English  English
12              1           3         3    1        1    English  English
13              3           1         5    3        1    English  English
14              3           4         4    3        5      Tamil    Tamil
15              5           3         3    3        5     French   French
16              5           3         3    5        5      Malay    Malay
17              2           2         2    3        2   Romanian Romanian
18              2           2         2    2        2    English  English
19              1           5         5    3        5    Quechua  Quechua
20              5           4         1    3        5    Zapotec  Zapotec

R相关问答推荐

基于R中的GPS点用方向箭头替换点

混淆矩阵,其中每列和等于1

将模拟变量乘以多个观测结果中的模拟变量

如何将在HW上运行的R中的消息(错误、警告等)作为批处理任务输出

查找图下的面积

如果行和大于值,则过滤

用黄土法确定区间

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

如何在PackageStatus()中列出&q;不可用的包&q;?

使用R中的dist()迭代ID匹配的欧几里德距离

根据约束随机填充向量的元素

如何移除GGPlot中超出与面相交的任何格网像元

将摘要图添加到facet_WRAP gglot的末尾

Conditional documentr::R中数据帧的summarize()

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

使用ggplot2绘制具有边缘分布的坡度图

组合名称具有模式的列表的元素

将每晚的平均值与每晚的值进行比较,统计是否有效?

根据列和行的不同组合 Select 各种单元格

使用循环改进功能( struct 简单)