R 计算数据帧中的表达式
我的数据框如下所示:R 计算数据帧中的表达式,r,if-statement,R,If Statement,我的数据框如下所示: df <- data.frame(Name=c("John","Paul","Bob"), Age=c("20","30_&_5","40")) Name Age 1 John 20 2 Paul 30_&_5 3 Bob 40 我尝试的是: library(stringr) ifelse( str_detect(df$Age, "[[:digit:]]+_[+]_[[:digit:]]+"), {
df <- data.frame(Name=c("John","Paul","Bob"), Age=c("20","30_&_5","40"))
Name Age
1 John 20
2 Paul 30_&_5
3 Bob 40
我尝试的是:
library(stringr)
ifelse(
str_detect(df$Age, "[[:digit:]]+_[+]_[[:digit:]]+"),
{
df$Age <- as.character(df$Age)
new_age <- unlist(strsplit(df$Age,"_"))
as.numeric(new_age[1]) + as.numeric(new_age[3])
},
df$Age
)
[1] "20" NA "40"
Warning message:
In ifelse(str_detect(df$Age, "[[:digit:]]+_[+]_[[:digit:]]+"), { :
NAs introduced by coercion
库(stringr)
如果有(
str_detect(df$Age,“[[:digit:][]++][u[]digit:][]+]”,
{
df$Age一种方法是使用eval(parse(…)
,即
df$Age[grepl('_&_', df$A, fixed = TRUE)] <- eval(parse(text = gsub('_&_', '+', df$A, fixed = TRUE)))
# Name Age
#1 John 20
#2 Paul 35
#3 Bob 40
df$Age[grepl(“”&&,df$A,fixed=TRUE)]对于算术运算,您不需要使用str\u detect之类的模式识别
df <- data.frame(Name=c("John","Paul","Bob"), Age=c("20","30+5","20*2"),
stringsAsFactors = F)
newAge <- sapply(df$Age, function(a) {
eval(parse(text = a))
})
df$newAge <- newAge
df没有eval(parse(…)
且基于purrr
和stringr
的选项可以是:
map_dbl(str_extract_all(df$Age, "([0-9]+)"), ~ sum(as.numeric(.)))
[1] 20 35 40
我的示例可能不太好。问题不在于操作本身。我在帖子中更改了示例。您应该展开并给出更多示例。所有示例都是这样的吗?&
?是的,“Age”列中的元素要么是整数,要么是带“&”(而不是“+”的表达式)。但这是一个示例数据集。我的问题与操作无关。我的问题与“强制引入的NAs”有关。好吧,那么这很容易解决。现在看一看。在您的案例中,这些NAs发生在str\u detect
没有…检测…您给它的模式。我的问题与操作无关。我的问题与“强制引入的NAs”有关这只是一个复制我得到的错误的例子。那么你想要什么?你在问什么??
map_dbl(str_extract_all(df$Age, "([0-9]+)"), ~ sum(as.numeric(.)))
[1] 20 35 40