寻找一种方法使我的数据在 R 中水平
Looking for a way to make my data horizontal in R
我目前在心理学实验室工作,开始对任务的响应时间数据进行数据分析。
任务本身进行了多次试验,这使得数据看起来杂乱无章 - 特别是现在更是如此,因为我最初的工作是将所有数据合并到一个数据框中。在数据的垂直方向上,我们可以看到参与 ID 和响应时间。太好了,这些都是重要的信息。但是,我们没有看到试验编号等,而是看到了这样表示的数据:
Participant 1, 23
Participant 1, 22
Participant 1, 25
Participant 2, 36
就像重复参与者 ID 一样(我们的样本量达到数千,所以我们的数据框很长)。我们无法挑选出重要信息,也无法查看哪个试验是哪个。所以,我们想要一个水平表示。
现在,我使用 R 作为数据分析的手段...但我对 R 有点陌生,这是我使用它的第一个项目。虽然我已经完成了在线 R 课程,但在处理实际数据时你真的学得最好。
为了修复我的数据,我一直在研究 reshape 和 tidyr 包:reshape 有 melt 和 cast 这可以帮助我,tidyr 有 pivot_wider 我认为这比 melt 和 cast 对我的帮助更大.
我一直在尝试使用来自我的实际数据的较小数据框来测试代码。
pivot_wider
我一开始用的是pivot_wider:
newdf1_test %>%
pivot_wider(names_from = name, values_from = V4)
我得到了一个提示,但它只有一个参与者的 ID 和一个响应时间值
我还收到一条警告消息,指出 V4 中的值不是唯一定义的,我得到了有关如何绕过警告的建议。所有的建议都刚刚向我返回了数据中的错误,替换为 1 行,数据为 0。这到底是什么意思?
熔铸
我只是不确定它是如何工作的。当我融化数据框时,我不确定之后该怎么做,因为我看到的仍然是一个长数据框,而不是宽数据框。
melt_testdf <- melt(newdf1_test, name = c("SID", V4 = c("response_time")
我的印象是这会添加两个新变量:SID 和 response_time 这将帮助我制作两个不同的数据表,然后转置它们以使合并的数据框水平。但是,不,返回给我的新数据框显示了名称(具有参与者 ID)、仅具有值 V4 的变量(V4 是最初具有响应时间的列的名称)和列值响应时间结束了。
我知道我应该投射以进一步重塑数据,但鉴于我已经很困惑我不想继续。
我该怎么办?我现在对此很困惑,无论我读了多少书,我都一无所获。
您看到的错误是因为 pivot_wider 假设只有一行,所以它需要一种方法来聚合 V4 结果。
如果你想要多行,你需要提供一个参数或数据,让新的宽 table 有一种有意义的方式来指定新行。
这是我为新 table:
提供 ID 的示例
newdf1_test <- tribble(
~test, ~name, ~V4,
'001', 'Participant 1', 23,
'002','Participant 1', 22,
'003','Participant 1', 25,
'001','Participant 2', 36)
newdf1_test %>%
pivot_wider(
names_from = name,
values_from = V4)
# A tibble: 3 x 3
test `Participant 1` `Participant 2`
<chr> <dbl> <dbl>
1 001 23 36
2 002 22 NA
3 003 25 NA
本质上,在这个版本中,pivot_wider 的 cols() 参数隐含在测试变量中。
而且您还可以看到,新数据 table 在某种程度上是有意义的,如果它没有测试变量则不会。
我希望这是有道理的!
我目前在心理学实验室工作,开始对任务的响应时间数据进行数据分析。
任务本身进行了多次试验,这使得数据看起来杂乱无章 - 特别是现在更是如此,因为我最初的工作是将所有数据合并到一个数据框中。在数据的垂直方向上,我们可以看到参与 ID 和响应时间。太好了,这些都是重要的信息。但是,我们没有看到试验编号等,而是看到了这样表示的数据:
Participant 1, 23
Participant 1, 22
Participant 1, 25
Participant 2, 36
就像重复参与者 ID 一样(我们的样本量达到数千,所以我们的数据框很长)。我们无法挑选出重要信息,也无法查看哪个试验是哪个。所以,我们想要一个水平表示。
现在,我使用 R 作为数据分析的手段...但我对 R 有点陌生,这是我使用它的第一个项目。虽然我已经完成了在线 R 课程,但在处理实际数据时你真的学得最好。
为了修复我的数据,我一直在研究 reshape 和 tidyr 包:reshape 有 melt 和 cast 这可以帮助我,tidyr 有 pivot_wider 我认为这比 melt 和 cast 对我的帮助更大.
我一直在尝试使用来自我的实际数据的较小数据框来测试代码。
pivot_wider
我一开始用的是pivot_wider:
newdf1_test %>%
pivot_wider(names_from = name, values_from = V4)
我得到了一个提示,但它只有一个参与者的 ID 和一个响应时间值
我还收到一条警告消息,指出 V4 中的值不是唯一定义的,我得到了有关如何绕过警告的建议。所有的建议都刚刚向我返回了数据中的错误,替换为 1 行,数据为 0。这到底是什么意思?
熔铸
我只是不确定它是如何工作的。当我融化数据框时,我不确定之后该怎么做,因为我看到的仍然是一个长数据框,而不是宽数据框。
melt_testdf <- melt(newdf1_test, name = c("SID", V4 = c("response_time")
我的印象是这会添加两个新变量:SID 和 response_time 这将帮助我制作两个不同的数据表,然后转置它们以使合并的数据框水平。但是,不,返回给我的新数据框显示了名称(具有参与者 ID)、仅具有值 V4 的变量(V4 是最初具有响应时间的列的名称)和列值响应时间结束了。
我知道我应该投射以进一步重塑数据,但鉴于我已经很困惑我不想继续。
我该怎么办?我现在对此很困惑,无论我读了多少书,我都一无所获。
您看到的错误是因为 pivot_wider 假设只有一行,所以它需要一种方法来聚合 V4 结果。
如果你想要多行,你需要提供一个参数或数据,让新的宽 table 有一种有意义的方式来指定新行。
这是我为新 table:
提供 ID 的示例
newdf1_test <- tribble(
~test, ~name, ~V4,
'001', 'Participant 1', 23,
'002','Participant 1', 22,
'003','Participant 1', 25,
'001','Participant 2', 36)
newdf1_test %>%
pivot_wider(
names_from = name,
values_from = V4)
# A tibble: 3 x 3
test `Participant 1` `Participant 2`
<chr> <dbl> <dbl>
1 001 23 36
2 002 22 NA
3 003 25 NA
本质上,在这个版本中,pivot_wider 的 cols() 参数隐含在测试变量中。 而且您还可以看到,新数据 table 在某种程度上是有意义的,如果它没有测试变量则不会。
我希望这是有道理的!