str_extract_all返回一个列表,但我希望 Dataframe 中有一列

ezykj2lf  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(79)

我想使用stringr包中的str_extract_all从字符串中提取数字,并且我想将输出作为现有数据框架的列中的数值。问题是str_extract_all的输出是一个列表。

UPDATE:我的总体目标是使用提取的数字过滤另一个名为film_main的数据框架的列。film_main是最初发布的 Dataframe film中的数据来源。

因此,如果film_main中的某列在列名中具有数字1和0,则该列中仅允许的条目是1、0和NA。该列中的任何其他条目都应设置为NA。参见下面的伪代码和film_main_desired
很抱歉在我最初的帖子中没有说得很清楚,我认为少就是多,但我最终没有很好地提出我的问题。

# Load package
library(stringr)

# Toy dataset
film_main = data.frame("grey..0..yellow..1.."=c(0, 1, 0, NA, 2), "grey..0..brown..1.."=c(3, 0, 0, NA, 2), "grey..0..blue..1...brown..2.."=c(0, 2, 1, 6, 1), "3grey..0..purple..1...brown..2.."=c(0, 1, 2, 3, NA), "3grey..0..purple..1...brown..2..brown..3.."=c(0, 1, 2, 3, NA))

# Extracting digits using stringr::str_extract_all
film = data.frame(var = names(film_main))
film$var2 = str_extract_all(film$var, "[:digit:]+")

# Result for string extraction
class(film$var2)
"list"    

# Desired result for string extraction 
class(film$var2)
"numeric"

# Filtering film_main - PSEUDOCODE 
lapply(film_main, function(x) ifelse(film_main$x %in% SOME_SORT_OF_A_FILTER_FEATURING_PERMITTED_DIGITS, df_main$x, NA))

# OVERALL GOAL 
film_main_desired= data.frame("grey..0..yellow..1.."=c(0, 1, 0, NA, NA), "grey..0..brown..1.."=c(NA, 0, 0, NA, NA), "grey..0..blue..1...brown..2.."=c(0, 2, 1, NA, 1), "3grey..0..purple..1...brown..2.."=c(0, 1, 2, 3, NA), "3grey..0..purple..1...brown..2..brown..3.."=c(0, 1, 2, 3, NA))

感谢您的任何帮助!

cidc1ykv

cidc1ykv1#

这就是你想要的吗使用其他几个tidyverse包- dplyr和tidyr -以及stringr。

library(dplyr)
library(tidyr)

film2 <- film %>% 
  mutate(var2 = str_extract_all(var1, "[:digit:]+")) %>%
  unnest() %>%
  mutate(var2 = as.numeric(var2))
wnrlj8wa

wnrlj8wa2#

如果你的字符串都是紧挨着的,那么这只是短了一点:

library(dplyr)
library(tidyr)

film2 <- film %>% 
  mutate(var2 = str_extract(var1, "[:digit:]+"),
  var2 = as.numeric(var2))

相关问题