使用 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
我需要你帮忙使用 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