我有一个数据框,看起来像这样:
trialcode response block
AM2A3 0 1
Empathy 1 1
ToM 4 1
Transfer 2.5 1
AM2D1 0 2
Empathy 4 2
ToM 2 2
Transfer 6 2
AM4M1 0 3
Empathy 6 3
ToM 6 3
Transfer 10 3在每个块中,第一行定义试验条件,后面三行是我的因变量。我想把它重新组织成这样:
Empathy ToM Transfer condition block
1 4 2.5 AM2A3 1
4 2 6 AM2D1 2
6 6 10 AM4M1 3有人能帮上忙吗?谢谢!
发布于 2021-07-16 16:29:50
可选解决方案:
library(data.table)
dt[,.(Empathy = .SD[trialcode == "Empathy", response],
Tom = .SD[trialcode == "ToM", response],
Transfer = .SD[trialcode == "Transfer", response],
condition = head(trialcode,1)),
by = block]数据:
dt <- fread("
trialcode response block
AM2A3 0 1
Empathy 1 1
ToM 4 1
Transfer 2.5 1
AM2D1 0 2
Empathy 4 2
ToM 2 2
Transfer 6 2
AM4M1 0 3
Empathy 6 3
ToM 6 3
Transfer 10 3
")发布于 2021-07-16 16:24:38
库(data.table)
DT <- setDT(mydata)
# wrangling before casting
DT[, condition := trialcode[1], by = .(block)]
# cast 2nd - nth row of each group
dcast(DT[, .SD[2:.N], by = .(condition)],
block + condition ~ trialcode, value.var = "response")
# block condition Empathy ToM Transfer
# 1: 1 AM2A3 1 4 2.5
# 2: 2 AM2D1 4 2 6.0
# 3: 3 AM4M1 6 6 10.0发布于 2021-07-16 16:19:39
欢迎加入SO!这应该是可行的:
library(tidyverse)
output <- data %>%
mutate(response = ifelse(response == 0, trialcode, response)) %>%
mutate(trialcode = ifelse(str_starts(trialcode,"AM"), "condition", trialcode)) %>%
pivot_wider(names_from = trialcode, values_from = response) %>%
relocate(Empathy, ToM, Transfer, condition, block)使用的数据:
data <- data.frame(trialcode = c("AM2A3","Empathy","ToM","Transfer","AM2D1","Empathy","ToM","Transfer"),
response = c(0,1,4,2.5,0,4,2,6),
block = c(1,1,1,1,2,2,2,2))输出:
Empathy ToM Transfer condition block
<chr> <chr> <chr> <chr> <dbl>
1 1 4 2.5 AM2A3 1
2 4 2 6 AM2D1 2https://stackoverflow.com/questions/68405721
复制相似问题