r - 将 `pivot_wider` 限制为匹配模式的行
问题描述
我想根据列中的所有值而不是那些与模式匹配的值来更宽地旋转列。
一些玩具数据:
df <- data.frame(utterance = c("A and stuff",
"X and something",
"A and some more",
"B etc.",
"B",
"x yz and so on",
"BBB"),
timestamp = c("00:05:31.736 - 00:05:35.263", "00:05:31.829 - 00:05:36.449",
"00:05:31.829 - 00:05:36.449", "00:05:31.829 - 00:05:36.449",
"00:05:31.842 - 00:05:35.302", "00:05:35.088 - 00:05:36.134",
"00:05:35.263 - 00:05:53.052"))
我只想扩大以orutterance
开头的那些行。我只能在以下所有行上更宽地旋转:A
B
utterance
library(tidyr)
df %>%
group_by(timestamp) %>%
pivot_wider(-utterance,
names_from = utterance,
values_from = utterance)
# A tibble: 5 x 8
# Groups: timestamp [5]
timestamp `A and stuff` `X and something` `A and some more` `B etc.` B `x yz and so on` BBB
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 00:05:31.736 - 00:05:35.263 A and stuff NA NA NA NA NA NA
2 00:05:31.829 - 00:05:36.449 NA X and something A and some more B etc. NA NA NA
3 00:05:31.842 - 00:05:35.302 NA NA NA NA B NA NA
4 00:05:35.088 - 00:05:36.134 NA NA NA NA NA x yz and so on NA
5 00:05:35.263 - 00:05:53.052 NA NA NA NA NA NA BBB
我试图对utterance
模式进行子集化,但出现错误:
df %>%
group_by(timestamp) %>%
pivot_wider(names_from = utterance[grepl("^(A|B)", utterance)],
values_from = utterance[grepl("^(A|B)", utterance)])
Error: object 'utterance' not found
我怎样才能只在匹配的行上进行旋转?
预期的:
# timestamp `A` utterance `B`
# <chr> <chr> <chr> <chr>
# 00:05:31.736 - 00:05:35.263 A and stuff NA NA
# 00:05:31.829 - 00:05:36.449 A and some more X and something B etc.
# 00:05:31.842 - 00:05:35.302 NA NA B
# 00:05:35.088 - 00:05:36.134 NA x yz and so on NA
# 00:05:35.263 - 00:05:53.052 NA NA BBB
解决方案
您可以创建一个新names
列:
library(stringr)
library(dplyr)
library(tidyr)
df %>%
mutate(pvt = case_when(str_detect(utterance, "^A") ~ "A",
str_detect(utterance, "^B") ~ "B",
TRUE ~ "utterance")) %>%
pivot_wider(names_from = pvt,
values_from = utterance)
这返回
# A tibble: 5 x 4
timestamp A utterance B
<chr> <chr> <chr> <chr>
1 00:05:31.736 - 00:05:35.263 A and stuff NA NA
2 00:05:31.829 - 00:05:36.449 A and some more X and something B etc.
3 00:05:31.842 - 00:05:35.302 NA NA B
4 00:05:35.088 - 00:05:36.134 NA x yz and so on NA
5 00:05:35.263 - 00:05:53.052 NA NA BBB
推荐阅读
- xcode - 在 Mach-O 文件 Payload/Runner.app/PlugIns/OneSignalNotificationServiceExtension 中找不到合适的架构来链接 arm64
- excel - 在保留代码的同时将 ComboBox 移动/复制到不同的工作表
- laravel - 无法在子域租户中显示端口
- javascript - Google Apps 脚本侧边栏未正确加载
- spring - 如何在 kotlin 中使用 STOMP?
- android - 异步任务的最佳替代品
- react-native - React Native 中的 Jest 测试
- generative-adversarial-network - 使用基于 GAN 的方法的合成时间序列数据问题
- android - 如何拥有没有“www”和“https”前缀的应用链接(Android)网址
- flutter - 颤振中的自定义形状(带有弯曲边缘)