首页 > 解决方案 > 如何使用从 R 中的现有列中提取的名称将列添加到 data.frame?

问题描述

我有DF data.frame. 我想在column (i.e., call it station_no)之后添加另一个。extracnumberunderscoreVariables column

library(lubridate)
library(tidyverse)

set.seed(123)

DF <- data.frame(Date = seq(as.Date("1979-01-01"), to = as.Date("1979-12-31"), by = "day"),
                 Grid_2 = runif(365,1,10), Grid_20 = runif(365,5,15)) %>% 
      pivot_longer(-Date, names_to = "Variables", values_to = "Values")

期望的输出:

DF_out <- data.frame(Date = c("1979-01-01","1979-01-01"),Variables = c("Grid_2","Grid_20"), 
                     Values = c(0.95,1.3),    Station_no = c(2,20))

标签: rdataframetidyverselubridatecolumnname

解决方案


简单的选项是parse_number返回数字转换值

library(dplyr)
DF %>% 
   mutate(Station_no  = readr::parse_number(Variables))

或者使用str_extract(如果我们想按照模式)

library(stringr)
DF %>%
   mutate(Station_no  = str_extract(Variables, "(?<=_)\\d+"))

或使用base R

DF$Station_no <-  trimws(DF$Variables, whitespace = '\\D+')

推荐阅读