如何在R中提取特定值
how to extract specific value in R
我想从 dataframe 中提取我需要在 R 中进行数据排列的特定值。我无法想出任何在 R 中使用的方法,因此我们将不胜感激。
我的数据框中的示例如下所示:
原始数据如下所示:
df <- data.frame(
v1=c('aa',438652,22, ,01),
v2=c(343012,45, ,'pi',75),
v3=c(56,'hi',78,670934, ),
v4=c( ,'cc',906235,05,44))
但是,我想将“6 位数字”提取到另一个新框架中
它看起来像这样:
new <- data.frame(
v5=c(438652,343012,670934,906235))
有人有什么想法吗?将不胜感激!!
你可以使用正则表达式
as.numeric(as.character(unlist(df)[grep("\d{6}", unlist(df))]))
#[1] 438652 343012 670934 906235
存储在新的data.frame
data.frame(v5 = as.numeric(as.character(unlist(df)[grep("\d{6}", unlist(df))])))
# v5
#1 438652
#2 343012
#3 670934
#4 906235
我们可以用nchar
来统计字符数
temp <- as.character(unlist(df))
data.frame(v5 = temp[nchar(temp) == 6])
# v5
#1 438652
#2 343012
#3 670934
#4 906235
这里有一个选项tidyverse
library(tidyr)
library(dplyr)
pivot_longer(df, everything(), values_to = 'v5') %>%
select(v5) %>%
mutate(v5 = as.numeric(as.character(v5))) %>%
filter(nchar(v5) == 6, !is.na(v5))
# A tibble: 4 x 1
# v5
# <dbl>
#1 343012
#2 438652
#3 906235
#4 670934
或在base R
v1 <- na.omit(as.numeric(t(df)))
v1[nchar(v1)== 6]
我想从 dataframe 中提取我需要在 R 中进行数据排列的特定值。我无法想出任何在 R 中使用的方法,因此我们将不胜感激。
我的数据框中的示例如下所示:
原始数据如下所示:
df <- data.frame(
v1=c('aa',438652,22, ,01),
v2=c(343012,45, ,'pi',75),
v3=c(56,'hi',78,670934, ),
v4=c( ,'cc',906235,05,44))
但是,我想将“6 位数字”提取到另一个新框架中 它看起来像这样:
new <- data.frame(
v5=c(438652,343012,670934,906235))
有人有什么想法吗?将不胜感激!!
你可以使用正则表达式
as.numeric(as.character(unlist(df)[grep("\d{6}", unlist(df))]))
#[1] 438652 343012 670934 906235
存储在新的data.frame
data.frame(v5 = as.numeric(as.character(unlist(df)[grep("\d{6}", unlist(df))])))
# v5
#1 438652
#2 343012
#3 670934
#4 906235
我们可以用nchar
来统计字符数
temp <- as.character(unlist(df))
data.frame(v5 = temp[nchar(temp) == 6])
# v5
#1 438652
#2 343012
#3 670934
#4 906235
这里有一个选项tidyverse
library(tidyr)
library(dplyr)
pivot_longer(df, everything(), values_to = 'v5') %>%
select(v5) %>%
mutate(v5 = as.numeric(as.character(v5))) %>%
filter(nchar(v5) == 6, !is.na(v5))
# A tibble: 4 x 1
# v5
# <dbl>
#1 343012
#2 438652
#3 906235
#4 670934
或在base R
v1 <- na.omit(as.numeric(t(df)))
v1[nchar(v1)== 6]