在 R 中设置数据框

劳拉·保尔森

我目前在以正确的方式设置我的数据框时遇到了一些问题。我想最终得到以下列参与者 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

有任何想法吗?

r2evans

这是一个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章