我有一個帶有單列的資料框,如下所示:
df <- data.frame(
Level = c(
'Midwest',
'Wisconsin: Good',
'Wisconsin: Neutral',
'Wisconsin: Bad',
NA,
'Minnesota: Good',
'Minnesota: Neutral',
'Minnesota: Bad',
NA,
'New England',
'New Hampshire: Good',
'New Hampshire: Neutral',
'New Hampshire: Bad',
NA,
'Vermont: Good',
'Vermont: Neutral',
'Vermont: Bad'
)
)
我有興趣對本專欄做兩件事:
Good獲取每個州的第一個關卡實體并將其放置在關于該Good關卡的新行中,然后...- 從每個級別,以便它只是顯示取出狀態的名字
Good,Neutral和Bad下面的每個國家的名字。
結果如下所示:
df_desired <- data.frame(
Level = c(
'Midwest',
'Wisconsin',
'Good',
'Neutral',
'Bad',
NA,
'Minnesota',
'Good',
'Neutral',
'Bad',
NA,
'New England',
'New Hampshire',
'Good',
'Neutral',
'Bad',
NA,
'Vermont',
'Good',
'Neutral',
'Bad'
)
)
使用 R 實作這一目標的最佳方法是什么,dplyr如果可能的話最好使用?
uj5u.com熱心網友回復:
這是一種方法tidyverse-:在 'Level' with之前提取前綴部分str_extract,然后在:with處拆分 'Level' 列separate_rows,洗掉duplicated元素并洗掉前綴列 'new'
library(dplyr)
library(stringr)
library(tidyr)
out <- df %>%
mutate(new = str_extract(Level, "\\w (?=:)")) %>%
separate_rows(Level, sep = ":\\s*") %>%
filter(!duplicated(cur_data()) | is.na(Level)) %>%
select(-new)
- 與 OP 進行核對
> all.equal(out, df_desired, check.attributes = FALSE)
[1] TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351299.html
下一篇:如何按年份創建百分比列并輸入R
