我想使用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))
感谢您的任何帮助!
2条答案
按热度按时间cidc1ykv1#
这就是你想要的吗使用其他几个tidyverse包- dplyr和tidyr -以及stringr。
wnrlj8wa2#
如果你的字符串都是紧挨着的,那么这只是短了一点: