語境
我有一個df. 我想從檔案名中提取空氣污染名稱x。
當字符向量中的名稱時,我可以提取空氣污染名稱:
library(tidyverse)
str_split('data/raw/air/CO/2013.txt', pattern = '/')[[1]][4]
#> [1] "CO"
str_split('data/raw/air/PM2.5/2013.txt', pattern = '/')[[1]][4]
#> [1] "PM2.5"
由reprex 包于 2022-11-02 創建(v2.0.1)
但是當空氣污染名稱是xdataframe中命名的變數時df,str_split()會產生意想不到的結果。
library(tidyverse)
df <- data.frame(x = c('data/raw/air/CO/2013.txt',
'data/raw/air/PM2.5/2013.txt'))
df %>% mutate(air = str_split(x, pattern = '/')[[1]][4])
#> x air
#> 1 data/raw/air/CO/2013.txt CO
#> 2 data/raw/air/PM2.5/2013.txt CO
由reprex 包于 2022-11-02 創建(v2.0.1)
問題
- str_split() 不是矢量化函式嗎?
- 如何從資料框中提取空氣污染名稱
df?
可重現的代碼
library(tidyverse)
# Expected results
str_split('data/raw/air/CO/2013.txt', pattern = '/')[[1]][4]
str_split('data/raw/air/PM2.5/2013.txt', pattern = '/')[[1]][4]
# Unexpected results
df <- data.frame(x = c('data/raw/air/CO/2013.txt',
'data/raw/air/PM2.5/2013.txt'))
df %>% mutate(air = str_split(x, pattern = '/')[[1]][4])
uj5u.com熱心網友回復:
請注意,您使用的那一刻意味著您[[1]]只考慮第一個值,而不是每個元素的第一個值。考慮使用pluck/chuck如下所示:
df %>%
mutate(air = map_chr(str_split(x, pattern = '/'), chuck, 4))
x air
1 data/raw/air/CO/2013.txt CO
2 data/raw/air/PM2.5/2013.txt PM2.5
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525498.html
上一篇:將函式從r重寫為python
