我想根據列中的所有值而不是那些與模式匹配的值來更寬地旋轉列。
一些玩具資料:
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"))
我只想將那些utterance以Aor開頭的行旋轉得更寬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
uj5u.com熱心網友回復:
您可以創建一個新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
uj5u.com熱心網友回復:
沒有的解決方案pivot_wider:
library(tidyverse)
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"))
df %>%
mutate(A = ifelse(str_detect(utterance,"^A"),utterance,NA),
B = ifelse(str_detect(utterance,"^B"),utterance,NA),
utterance = ifelse(str_detect(utterance,"^A|^B"),NA, utterance)) %>%
relocate(utterance,.before="B") %>%
group_by(timestamp) %>%
fill(everything(),.direction = "downup") %>%
ungroup() %>%
distinct()
#> # A tibble: 5 × 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340021.html
上一篇:將R中的符號繪制為權重的餅圖
下一篇:R中兩個二項式分布的交集
