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
ratioratioratioratio在函数语言中,例如传递给函数的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)吗