我目前在以正确的方式设置我的数据框时遇到了一些问题。我想最终得到以下列参与者 ID、SpeakerDialect (TSpeaker)、SpeakerNumber(TSpeaker) 和 Score。
我从谷歌表单得到的输出是 4 列分数,一列带有时间戳(参与者 ID)。现在麻烦来了。我想添加一些关于他们给数据框评分的视频的信息。我使用以下代码使其工作 - 但这里不包括时间戳。添加时间戳时,它完全搞砸了。这是一个重复测量设计,因此在最终数据帧中相同的时间戳必须重复 4 次
trustworth1 <- read.csv('Danskernes holdninger til politiske udsagn 1.csv')
trustworth1 <- trustworth1 %>% select(Hvor.troværdig.er.personen., Hvor.troværdig.er.personen..1, Hvor.troværdig.er.personen..2, Hvor.troværdig.er.personen..3)
TSpeaker <- c('2', '3', '4', '1')
TDialect <- c('1', '2', '2', '1')
trustworth1 <- trustworth1 %>% t()
trustworth1 <- cbind(TSpeaker, TDialect, trustworth1) %>%
as.tibble()
trustworth1 <- unite(trustworth1, Score, starts_with('V'), sep = ", ", remove = FALSE, na.rm = FALSE)
trustworth1 <- trustworth1 %>% select(TSpeaker,TDialect, Score)
trustworth1 <- separate_rows(trustworth1, c(Score), convert = FALSE)
测试数据框
TimeStamp <- c(1, 2, 3, 4, 5, 6, 7)
Speaker1 <- c(4, 7, 9, 3, 2, 4, 9)
Speaker2 <- c(7, 1, 9, 0, 2, 5, 10)
Speaker3 <- c(3, 1, 9, 2, 9, 5, 10)
Speaker4 <- c(1, 1, 6, 0, 6, 5, 1)
df <- data.frame(TimeStamp, Speaker1, Speaker2, Speaker3, Speaker4)
说话人1的方言是1
说话人2的方言是2
扬声器 3 的方言是 1
扬声器 4 的方言是 2
理想情况下,我最终会得到一个数据框,每个参与者有 4 行,每个演讲者的评级都有一个
原始数据:
TimeStamp
<chr>
Speaker2
<int>
Speaker3
<int>
Speaker4
<int>
Speaker1
<int>
1 2020/12/07 11:33:39 AM CET 3 8 6 9
2 2020/12/07 12:16:33 PM CET 5 5 5 5
3 2020/12/07 12:29:11 PM CET 6 7 8 9
4 2020/12/07 12:47:39 PM CET 7 8 8 9
5 2020/12/07 1:04:01 PM CET 5 5 5 5
6 2020/12/07 1:05:33 PM CET 0 8 9 5
6 rows
有任何想法吗?
这是一个 dplyr 解决方案。
为了引入方言,我建议使用合并/加入操作,它将方言与每个(已知的)说话者号码配对。对于这些数据,我也将使用一个框架:
dialects <- data.frame(SpeakerNumber = paste0("Speaker", 1:4), SpeakerDialect = c(1L, 2L, 1L, 2L))
现在是将“宽”格式转换为“长”格式的问题:
library(dplyr)
library(tidyr) # pivot_longer
pivot_longer(df, -TimeStamp, names_to = "SpeakerNumber", values_to = "Score") %>%
left_join(dialects, by = "SpeakerNumber")
# # A tibble: 28 x 4
# TimeStamp SpeakerNumber Score SpeakerDialect
# <dbl> <chr> <dbl> <int>
# 1 1 Speaker1 4 1
# 2 1 Speaker2 7 2
# 3 1 Speaker3 3 1
# 4 1 Speaker4 1 2
# 5 2 Speaker1 7 1
# 6 2 Speaker2 1 2
# 7 2 Speaker3 1 1
# 8 2 Speaker4 1 2
# 9 3 Speaker1 9 1
# 10 3 Speaker2 9 2
# # ... with 18 more rows
您使用 name SpeakerNumber
,这表明您只想要该字段中的数字,也可能是数字本身。如果是这种情况,请添加
... %>%
mutate(SpeakerNumber = as.integer(gsub("^Speaker", "", SpeakerNumber)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句