Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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_Function - Fatal编程技术网

R 函数计算数据框中具有不同名称的列

R 函数计算数据框中具有不同名称的列,r,function,R,Function,我有这样一个数据帧(总计): 我想要一个函数来评估两个标准。当我一个接一个地做的时候 total$critA <- as.numeric((total$mA1+total$nmA1>=4)&(total$nmA1>=bdA1)) total$critA=4)和(total$nmA1>=bdA1)) 如果为真,我得到0,如果为假,我得到1。我想将此应用于所有治疗(A1(m、nm和bd)、A2、A3等) 我对R真的很陌生,还没有弄明白如何做一大堆事情,所以非常感谢您的帮

我有这样一个数据帧(总计):

我想要一个函数来评估两个标准。当我一个接一个地做的时候

total$critA <- as.numeric((total$mA1+total$nmA1>=4)&(total$nmA1>=bdA1))
total$critA=4)和(total$nmA1>=bdA1))
如果为真,我得到0,如果为假,我得到1。我想将此应用于所有治疗(A1(m、nm和bd)、A2、A3等)


我对R真的很陌生,还没有弄明白如何做一大堆事情,所以非常感谢您的帮助。谢谢

我的想法是这样的:(如果你与
dput
共享数据,我会复制/粘贴数据并进行测试……以获得编写好的、可重复的R问题的其他技巧

add_crit = function(data, treatment) {
    m_name = paste0("m", treatment)
    nm_name = paste0("nm", treatment)
    bd_name = paste0("bd", treatment)
    crit_name = paste0("crit", treatment)

    data[crit_name] = as.numeric(
      (data[m_name] + data[nm_name] >= 4) & (data[nm_name] >= data[bd_name])
    )
    return(data)
}

treatments = c("A1", "A2", "B1", "B2")
data_with_crit = total

for (trt in treatments) {
    data_with_crit = add_crit(data_with_crit, trt)
}
我使用
paste
将您需要的列名构建为字符串。当您将列名存储在变量中时,您需要使用
[
而不是
$
,否则它们同样有效

fortunes::fortune(343)
大多数R新手迟早会被这条太方便的捷径所困扰。作为R新手, 将R视为您的银行账户:过度使用
$
-提取可能会导致不良后果。 最好尽早养成
'[['
'['
的习惯。 --Peter Ehlers(关于$-extraction的使用) R-help(2013年3月)


处理此问题的另一种(更一般化的)方法是将数据“融化”为长格式—您将有一个
treatment
列,列值为
A1、A2、
,然后是
m
nm
bd
crit
。每个id有多行(每个id有一行治疗)。这将适用于
数据表
dplyr
解决方案。也许其他人会发布一个示例。

欢迎使用stackoverflow!查看
应用
函数系列:另外,确保您知道如果为真,您将得到1,如果为假,您将得到0(而不是您在问题中陈述的相反).你说得对,格雷戈,这是另一条路,对不起!谢谢你提醒我!我一定会去看看@Christanks的帮助!
fortunes::fortune(343)