R 增加(或不增加)每行一列的内容

R 增加(或不增加)每行一列的内容,r,syntax-error,rows,apply,R,Syntax Error,Rows,Apply,我有一个混合类的数据框: 比率(系数或数字) 其他(无论什么) 错误。计数器(整数) 我的最终目标是增加错误。当比率大于1时,计数器 首先,尝试输出相关行: > apply(d, 1, function(x) if (as.numeric(x$ratio) > 1.00) paste(x)) Error in x$ratio : $ operator is invalid for atomic vectors 我不明白那个错误 尽管如此,其使用双括号的等效语法仍然有效: &g

我有一个混合类的数据框:

  • 比率
    (系数或数字)
  • 其他
    (无论什么)
  • 错误。计数器
    (整数)

我的最终目标是增加
错误。当
比率大于1时,计数器

首先,尝试输出相关行:

> apply(d, 1, function(x) if (as.numeric(x$ratio) > 1.00) paste(x))
Error in x$ratio : $ operator is invalid for atomic vectors
我不明白那个错误

尽管如此,其使用双括号的等效语法仍然有效:

> apply(d, 1, function(x) if (as.numeric(x[["ratio"]]) > 1.00) paste(x))
$`1`
NULL

$`2`
[1] "2" "2" "0"

$`3`
[1] "1.33" "3"    "0"   

$`4`
NULL

$`5`
NULL

$`6`
NULL
右:第2行和第3行的错误计数器应增加1。让我们开始吧:

> apply(d, 1, function(x) if (as.numeric(x[["ratio"]]) > 1.00)
                          {x[["error.counter"]] <- x[["error.counter"]] + 1})
$`1`
NULL

$`2`
[1] 1

$`3`
[1] 1

$`4`
NULL

$`5`
NULL

$`6`
NULL
由于一个我仍然无法理解的原因,数据帧没有更新

因此,有两个问题:

  • 使用$引用列有什么问题
  • 为什么数据框没有更新

一般来说,要获得数据帧中某一点的变量总和,可以使用累加和,这是R中的函数
cumsum
。在这种情况下,如果
比率
太大,则寻找一个变量的累加和为1,否则为0。您可以通过以下方式执行此操作:

d$error.counter <- cumsum(d$ratio > 1)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             2
# 5  0.66     1             2
# 6  1.00     2             2
如果要在没有错误的情况下将错误计数器设置为0,并以其他方式将其累积,可能:

d$error.counter <- ifelse(d$ratio > 1, cumsum(d$ratio > 1), 0)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0
d$error.counter 1,累加(d$ratio>1),0)
D
#比率其它误差计数器
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0

一般来说,要获得数据帧中某一点的变量总和,您需要使用累积总和,这是R中的函数
cumsum
。在这种情况下,如果
比率
太大,则寻找变量的累积总和为1,否则为0。您可以通过以下方式执行此操作:

d$error.counter <- cumsum(d$ratio > 1)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             2
# 5  0.66     1             2
# 6  1.00     2             2
如果要在没有错误的情况下将错误计数器设置为0,并以其他方式将其累积,可能:

d$error.counter <- ifelse(d$ratio > 1, cumsum(d$ratio > 1), 0)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0
d$error.counter 1,累加(d$ratio>1),0)
D
#比率其它误差计数器
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0

一般来说,要获得数据帧中某一点的变量总和,您需要使用累积总和,这是R中的函数
cumsum
。在这种情况下,如果
比率
太大,则寻找变量的累积总和为1,否则为0。您可以通过以下方式执行此操作:

d$error.counter <- cumsum(d$ratio > 1)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             2
# 5  0.66     1             2
# 6  1.00     2             2
如果要在没有错误的情况下将错误计数器设置为0,并以其他方式将其累积,可能:

d$error.counter <- ifelse(d$ratio > 1, cumsum(d$ratio > 1), 0)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0
d$error.counter 1,累加(d$ratio>1),0)
D
#比率其它误差计数器
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0

一般来说,要获得数据帧中某一点的变量总和,您需要使用累积总和,这是R中的函数
cumsum
。在这种情况下,如果
比率
太大,则寻找变量的累积总和为1,否则为0。您可以通过以下方式执行此操作:

d$error.counter <- cumsum(d$ratio > 1)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             2
# 5  0.66     1             2
# 6  1.00     2             2
如果要在没有错误的情况下将错误计数器设置为0,并以其他方式将其累积,可能:

d$error.counter <- ifelse(d$ratio > 1, cumsum(d$ratio > 1), 0)
d
#   ratio other error.counter
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0
d$error.counter 1,累加(d$ratio>1),0)
D
#比率其它误差计数器
# 1  1.00     1             0
# 2  2.00     2             1
# 3  1.33     3             2
# 4  1.00     4             0
# 5  0.66     1             0
# 6  1.00     2             0


ratio
ratio
ratio
ratio在函数语言中,例如传递给函数的R变量不会更新。您需要分配
apply
的返回值(这与您的返回值不起作用)。还有,@josilber说了些什么。你知道语法错误吗(问题1)?如果你只想增加那些比率>1,
indx1;indx[indx]@user3341592语法错误的原因是当您使用
apply
时,
d
成为一个矩阵,并且您不能对矩阵使用
$
符号。您需要使用
x[“ratio”]
x[[“ratio”]]
。非常感谢您的回答!我必须承认错误消息是不可理解的(对我这样的人来说)…在函数语言中,比如传递给函数的R变量是不更新的。您需要分配
apply
的返回值(这与您的返回值不起作用)。还有,@josilber说了些什么。你知道语法错误吗(问题1)?如果你只想增加那些比率>1,
indx1;indx[indx]@user3341592语法错误的原因是当您使用
apply
时,
d
成为一个矩阵,并且您不能对矩阵使用
$
符号。您需要使用
x[“ratio”]
x[[“ratio”]]
。非常感谢您的回答!我必须承认错误消息是不可理解的(对我这样的人来说)…在函数语言中,比如传递给函数的R变量是不更新的。您需要分配
apply
的返回值(这与您的返回值不起作用)。还有,@josilber说了些什么。你知道语法错误吗(问题1)?如果你只想增加那些比率>1,
indx1;indx[indx]@user3341592语法错误的原因是当您使用
apply
时,
d
成为一个矩阵,并且您不能对矩阵使用
$
符号。您需要使用
x[“ratio”]
x[[“ratio”]]
。非常感谢您的回答!我必须承认错误消息是不可理解的(对我这样的人来说)…在函数语言中,比如传递给函数的R变量是不更新的。您需要分配
apply
的返回值(这与您的返回值不起作用)。还有,@josilber说了什么。你知道语法错误(问题1)吗