gpt4 book ai didi

r - 在 R 中将凌乱的宽数据转换为长数据

转载 作者:行者123 更新时间:2023-12-05 09:05:45 24 4
gpt4 key购买 nike

我是 R 的新手,我在尝试将我的 df 从宽转换为长时遇到了一些麻烦。目前它看起来像下面这样:

<表类="s-表"><头>ppt_numw.1.rtw.1.vrtw.2.rtw.2.vrtn.1.rtn.1.vrtn.2.rtn.2.vrt<正文>10.902.001.252.051.011.852.061.7621.022.043.022.451.071.952.541.60

有两个实验条件和两个难度级别。对于实验条件,“w”代表想要启动,“n”代表需要启动。对于难度级别,1 表示困难的试验,2 表示简单的试验。最后,rt( react 时间)和 vrt( react 时间方差)是我感兴趣的测量值。我正在尝试 reshape 我的数据,使其如下所示:

<表类="s-表"><头>ppt_num类型难度<日>日 虚拟现实<正文>1w10.902.001w21.252.051n11.011.852n22.061.762w11.022.042w23.022.452n11.071.952n22.541.60

到目前为止,我已经尝试使用 melt(),但这并没有产生预期的结果。

new_df <- melt(df, id.vars = c("ppt_num"))

如有任何关于此处采用方法的建议,我们将不胜感激。

最佳答案

这是一个带有 pivot_longer 的选项,我们指定 names_sep匹配 .在列名称中的数字之后,然后是 separate将“grp”列分为“类型”和“难度”

library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -ppt_num, names_to = c('grp', '.value'),
names_sep = '(?<=\\d)\\.') %>%
separate(grp, into = c('type', 'difficulty'))

-输出

# A tibble: 8 x 5
# ppt_num type difficulty rt vrt
# <int> <chr> <chr> <dbl> <dbl>
#1 1 w 1 0.9 2
#2 1 w 2 1.25 2.05
#3 1 n 1 1.01 1.85
#4 1 n 2 2.06 1.76
#5 2 w 1 1.02 2.04
#6 2 w 2 3.02 2.45
#7 2 n 1 1.07 1.95
#8 2 n 2 2.54 1.6

names_sep 中使用的模式匹配. ( . 是正则表达式中匹配任何字符的元字符,因此我们转义以获取文字值),在列名称中的数字后面( (?<=\\d) - 正则表达式查找以匹配数字)

数据

df <- structure(list(ppt_num = 1:2, w.1.rt = c(0.9, 1.02), w.1.vrt = c(2, 
2.04), w.2.rt = c(1.25, 3.02), w.2.vrt = c(2.05, 2.45), n.1.rt = c(1.01,
1.07), n.1.vrt = c(1.85, 1.95), n.2.rt = c(2.06, 2.54), n.2.vrt = c(1.76,
1.6)), class = "data.frame", row.names = c(NA, -2L))

关于r - 在 R 中将凌乱的宽数据转换为长数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66805678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com