应用函数ifelse总结两列

时间:2018-02-20 16:12:09

标签: r function sum apply

我想为以下问题找到解决方案,希望有人能帮助我。 我有一个超过2000列的数据框,我只需要其中两个。首先,我需要检查两列的总和(df $ values1 + df $ values2。)是否超过15。 现在我想有一个结果列: 如果是:15 如果否:总结第一列到第二列的值,以便df $ values1 + df $ values2。

我尝试使用以下内容获得结果,但它不起作用:

df$result <- apply(df[which(colnames(df)=="values1")],2, 
    function(x) {ifelse(df[which(colnames(df)=="values2")]+x >= 15, 15, df[which(colnames(df) == "values2")] + x)
    }
)

谢谢!

2 个答案:

答案 0 :(得分:2)

如果我理解正确的话:

df$sumOfValues = pmin(df$values1 + df$values2, 15)

答案 1 :(得分:0)

欢迎使用StackOverflow。

From now on, make sure that you post reproducible questions if you would like to get any help from here.

首先,让我们来看看你的代码。

df$result <-
  apply(df[which(colnames(df) == "values1")], 2, function(x) {
    ifelse(df[which(colnames(df) == "values2")] + x >= 15,
           15,
           df[which(colnames(df) ==
                      "values2")] + x)
  })
  

您的代码“说”:对于df中每个名为values1的列,如果有任何值   values2 df + values115的值等于或大于15   比values2,分配值values1,否则分配which +值   在df[,1]

基本上,您正在用向量替换单个数字,因此您将返回一个列表。

提示:

1)请勿使用df$values1来引用您的列。相反,可以使用apply或类似内容或ifelse直接对数据进行子集化。

2)在1维数据上应用函数时,请勿使用ifelse(df$values1 + df$values2 >= 15, 15, df$values1 + df$values2)

解决方案,或者上面的 kgolyaev 编写的示例,或者,如果您想使用xcode-select --install ,可以选择:

{{1}}