我有一个人手的数据集,目前一个人被定义为一个单一的观察。我想 reshape 数据框以将手作为个人观察结果。我尝试了一些带有“dplyr”包和“收集”功能的东西,但完全没有成功。
因此,每个人都在一行中:
id Gender Age Present_R Present_L Dominant
1 F 2 TRUE TRUE R
2 F 5 TRUE FALSE L
3 M 8 FALSE FALSE R
为此,每只手都在一行上:
id Gender Age Hand Present Dominant
1 F 2 R TRUE TRUE
2 F 2 L TRUE FALSE
3 F 5 R TRUE FALSE
4 F 5 L FALSE TRUE
5 M 8 R FALSE TRUE
6 M 8 L FALSE FALSE
请注意,手的优势变得合乎逻辑。
最佳答案
我们可以收集
成'long'格式,排列
按'id',然后通过unlist
创建'Dominant'通过删除 'Hand' 列的子字符串呈现'列,'Hand'
library(tidyverse)
gather(df1, Hand, Present, Present_R:Present_L) %>%
arrange(id) %>%
mutate(Dominant = unlist(df1[c("Present_L", "Present_R")]),
id = row_number(),
Hand = str_remove(Hand, ".*_"))
# id Gender Age Dominant Hand Present
#1 1 F 2 TRUE R TRUE
#2 2 F 2 FALSE L TRUE
#3 3 F 5 FALSE R TRUE
#4 4 F 5 TRUE L FALSE
#5 5 M 8 TRUE R FALSE
#6 6 M 8 FALSE L FALSE
根据 OP 的评论,我们似乎需要将“主导”与“手”进行比较
gather(df1, Hand, Present, Present_R:Present_L) %>%
arrange(id) %>%
mutate(id = row_number(),
Hand = str_remove(Hand, ".*_"),
Dominant = Dominant == Hand)
# id Gender Age Dominant Hand Present
#1 1 F 2 TRUE R TRUE
#2 2 F 2 FALSE L TRUE
#3 3 F 5 FALSE R TRUE
#4 4 F 5 TRUE L FALSE
#5 5 M 8 TRUE R FALSE
#6 6 M 8 FALSE L FALSE
关于R:如何从一列中创建额外的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53998913/