Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算数据帧中的表达式_R_If Statement - Fatal编程技术网

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