转置 R 数据框中的单个单元格
Transpose individual cells in R dataframe
这是数据帧的图像:
我从一项认知心理任务中获得了这个数据框,在该任务中,人们对形状和声音做出反应。他们应该始终按该顺序响应,但有时他们会切换但仍然正确响应(例如,请参见倒数第二行)。我可以轻松地隔离这些行,但我想转置响应时间,以便它们位于正确的列中。在示例中,形状刺激的响应时间 1628 应在 'RT1' 列中,声音响应 1462 应在 'RT2'.
列中
我可以使用什么函数或代码来转置给定行和列坐标的单元格?理想情况下,我会在 'if' 语句的上下文中使用它来 select 响应被转置的行。
希望这是有道理的。我不能分享实际的数据框。
假设您的数据如下所示:
dat <- data.frame(
Type1 = c("SHAPE", "SHAPE", "SOUND", "SHAPE"),
Type2 = c("SOUND", "SOUND", "SHAPE", "SOUND"),
RT1 = 10 + 1:4,
RT2 = 20 + 1:4)
基础 R
swaps <- dat$Type1 == "SOUND" & dat$Type2 == "SHAPE"
tmp1 <- dat$Type2[swaps]
dat$Type2[swaps] <- dat$Type1[swaps]
dat$Type1[swaps] <- tmp1
tmp1 <- dat$RT2[swaps]
dat$RT2[swaps] <- dat$RT1[swaps]
dat$RT1[swaps] <- tmp1
dat
# Type1 Type2 RT1 RT2
# 1 SHAPE SOUND 11 21
# 2 SHAPE SOUND 12 22
# 3 SHAPE SOUND 23 13
# 4 SHAPE SOUND 14 24
dplyr
library(dplyr)
dat %>%
mutate(
swaps = Type1 == "SOUND" & Type2 == "SHAPE",
tmp = if_else(swaps, Type2, Type1),
Type2 = if_else(swaps, Type1, Type2),
Type1 = tmp,
tmp = if_else(swaps, RT2, RT1),
RT2 = if_else(swaps, RT1, RT2),
RT1 = tmp
) %>%
select(-tmp)
data.table
library(data.table)
as.data.table(dat)[ Type1 == "SOUND" & Type2 == "SHAPE",
c("Type1", "Type2", "RT1", "RT2") := .(Type2, Type1, RT2, RT1) ]
这是数据帧的图像:
我从一项认知心理任务中获得了这个数据框,在该任务中,人们对形状和声音做出反应。他们应该始终按该顺序响应,但有时他们会切换但仍然正确响应(例如,请参见倒数第二行)。我可以轻松地隔离这些行,但我想转置响应时间,以便它们位于正确的列中。在示例中,形状刺激的响应时间 1628 应在 'RT1' 列中,声音响应 1462 应在 'RT2'.
列中我可以使用什么函数或代码来转置给定行和列坐标的单元格?理想情况下,我会在 'if' 语句的上下文中使用它来 select 响应被转置的行。
希望这是有道理的。我不能分享实际的数据框。
假设您的数据如下所示:
dat <- data.frame(
Type1 = c("SHAPE", "SHAPE", "SOUND", "SHAPE"),
Type2 = c("SOUND", "SOUND", "SHAPE", "SOUND"),
RT1 = 10 + 1:4,
RT2 = 20 + 1:4)
基础 R
swaps <- dat$Type1 == "SOUND" & dat$Type2 == "SHAPE"
tmp1 <- dat$Type2[swaps]
dat$Type2[swaps] <- dat$Type1[swaps]
dat$Type1[swaps] <- tmp1
tmp1 <- dat$RT2[swaps]
dat$RT2[swaps] <- dat$RT1[swaps]
dat$RT1[swaps] <- tmp1
dat
# Type1 Type2 RT1 RT2
# 1 SHAPE SOUND 11 21
# 2 SHAPE SOUND 12 22
# 3 SHAPE SOUND 23 13
# 4 SHAPE SOUND 14 24
dplyr
library(dplyr)
dat %>%
mutate(
swaps = Type1 == "SOUND" & Type2 == "SHAPE",
tmp = if_else(swaps, Type2, Type1),
Type2 = if_else(swaps, Type1, Type2),
Type1 = tmp,
tmp = if_else(swaps, RT2, RT1),
RT2 = if_else(swaps, RT1, RT2),
RT1 = tmp
) %>%
select(-tmp)
data.table
library(data.table)
as.data.table(dat)[ Type1 == "SOUND" & Type2 == "SHAPE",
c("Type1", "Type2", "RT1", "RT2") := .(Type2, Type1, RT2, RT1) ]