使用 r 处理数据

wrangling data using r

我需要你帮忙使用 R 整理数据。

我的原始数据是这样的:

   > dput(mydata)
structure(list(subject = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L), .Label = c("N1", "E1"), class = "factor"), item_number = c(1, 
2, 1, 7, 1, 2, 2, 10), block = c(1, 1, 3, 3, 1, 1, 3, 3), condition = c("L", 
"L", "EI", "I", "L", "L", "EI", "I")), row.names = c(NA, 8L), class = "data.frame")

 > mydata
  subject item_number block condition
1      N1           1     1         L
2      N1           2     1         L
3      N1           1     3        EI
4      N1           7     3         I
5      E1           1     1         L
6      E1           2     1         L
7      E1           2     3        EI
8      E1          10     3         I

由于某些编程错误,我无法正确标记块 1 中的条件。因此,我试图通过为不同的主题和不同的项目编号重命名块 1 中的条件来调整它。理想情况下,块 1 中任何被赋予条件值 L 的 item_number 都应根据块 3 中相同 item_number 的条件标签进行重命名。例如,对于主题 N1,如果item_number1存在于block 3中,条件标签为EI,则block 1中item_number1的条件标签应设置为相同的标签'EI'。如果主题 N1 的块 3 中不存在 item_number 2,则块 1 中项目编号 2 的条件标签应为 'E'.

所需的输出应如下所示:

dput(mydata_cleaned)
structure(list(subject = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L), .Label = c("N1", "E1"), class = "factor"), item_number = c(1, 
2, 1, 7, 1, 2, 2, 10), block = c(1, 1, 3, 3, 1, 1, 3, 3), condition = c("EI", 
"E", "EI", "I", "E", "EI", "EI", "I")), row.names = c(NA, 8L), class = "data.frame")
> mydata_cleaned
  subject item_number block condition
1      N1           1     1        EI
2      N1           2     1         E
3      N1           1     3        EI
4      N1           7     3         I
5      E1           1     1         E
6      E1           2     1        EI
7      E1           2     3        EI
8      E1          10     3         I

非常感谢任何帮助。

一个选项是使用从 'block' 创建的列名称重塑为 'wide' 格式,然后根据 3 的值对 1 列进行替换,并且重塑回 'long' 格式

library(dplyr)
library(tidyr)
mydata %>%
 pivot_wider(names_from = block, values_from = condition) %>% 
 mutate(`1` = case_when(`3` %in% "EI" & `1` %in% "L"  ~ `3`, 
       is.na(`3`) ~ 'E', TRUE ~ `1`)) %>%
 pivot_longer(cols = c(`1`, `3`), names_to = 'block',
          values_to = 'condition', values_drop_na = TRUE)

-输出

# A tibble: 8 x 4
#  subject item_number block condition
#  <fct>         <dbl> <chr> <chr>    
#1 N1                1 1     EI       
#2 N1                1 3     EI       
#3 N1                2 1     E        
#4 N1                7 3     I        
#5 E1                1 1     E        
#6 E1                2 1     EI       
#7 E1                2 3     EI       
#8 E1               10 3     I