比较R中的两列后交换值
我想写一段代码,检查数据帧中的两列并比较它们。一个应该有下限,另一个有上限。如果上限列上的值小于下限列上的值,则应交换这些值。如果下限和上限均为零,则应使用值(如2)替换上限列。样本数据如下所示:比较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
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
dfrmdfrm假设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
与我答案中的函数一起使用。