比较R中的两列后交换值

比较R中的两列后交换值,r,R,我想写一段代码,检查数据帧中的两列并比较它们。一个应该有下限,另一个有上限。如果上限列上的值小于下限列上的值,则应交换这些值。如果下限和上限均为零,则应使用值(如2)替换上限列。样本数据如下所示: lower_limit upper_limit 0 3 0 4 5 2 0 15 0 0 0 0 7 4 8 2 在运行代码之后,它应该生成如下内容 lower_limit upper_limit 0 3 0 4 2 5 0 15 0 2 0

我想写一段代码,检查数据帧中的两列并比较它们。一个应该有下限,另一个有上限。如果上限列上的值小于下限列上的值,则应交换这些值。如果下限和上限均为零,则应使用值(如2)替换上限列。样本数据如下所示:

lower_limit upper_limit
0   3
0   4
5   2
0   15
0   0
0   0
7   4
8   2
在运行代码之后,它应该生成如下内容

lower_limit upper_limit
0   3
0   4
2   5
0   15
0   2
0   2
4   7
2   8

dfrm
dfrm假设
dat
是数据帧/矩阵的名称:

setNames(as.data.frame(t(apply(dat, 1, function(x) { 
                                         tmp <- sort(x);
                                         tmp[2] <- tmp[2] + (!any(x)) * 2; 
                                         return(tmp) }))), colnames(dat))
  lower_limit upper_limit
1           0           3
2           0           4
3           2           5
4           0          15
5           0           2
6           0           2
7           4           7
8           2           8
setNames(如.data.frame(t)应用(dat,1,函数(x){

tmp假设
dat
是数据帧/矩阵的名称:

setNames(as.data.frame(t(apply(dat, 1, function(x) { 
                                         tmp <- sort(x);
                                         tmp[2] <- tmp[2] + (!any(x)) * 2; 
                                         return(tmp) }))), colnames(dat))
  lower_limit upper_limit
1           0           3
2           0           4
3           2           5
4           0          15
5           0           2
6           0           2
7           4           7
8           2           8
setNames(如.data.frame(t)应用(dat,1,函数(x){


tmp显然很好而且干净,但我认为第5行和第6行应该是
上限
@DWin的2,但这只回答了问题的第一部分:)是的。注意到。Fixed.DWin,我正在使用你的代码,当两列都为零时,它不会取代2(仍然)在开始新的会话后对我有效。添加代码以创建可复制版本的
dfrm
。显然很好而且干净,但我认为第5行和第6行应该是
上限的2
@DWin,但这只回答了问题的第一部分:)是的。注意到了。Fixed.DWin,我正在使用您的代码,当两列都为zeroIt时,它不会替换2(仍然)启动新会话后对我有效。添加代码以创建可复制版本的
dfrm
。我正在尝试理解您的函数在做什么,请您解释一下。@jonestats我添加了一个解释。我已经看过了,非常感谢。我有16个具有类似列名的数据集,希望替换上下两个列名在所有这些值中,是否可以使用循环来执行此操作?@jonestats您应该使用示例数据创建一个新问题。我想您可以将
lappy
与我的答案中的函数一起使用。我正在尝试理解您的函数在做什么,请您解释一下。@jonestats我添加了一个解释。我已经看到了,谢谢很多。我有16个具有相似列名的数据集,希望替换所有数据集中的上限和下限值,是否可以使用循环来完成此操作?@jonestats您应该使用示例数据创建一个新问题。我想您可以将
lappy
与我答案中的函数一起使用。