Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 使用不同列应用函数-R_Arrays_R_Vector - Fatal编程技术网

Arrays 使用不同列应用函数-R

Arrays 使用不同列应用函数-R,arrays,r,vector,Arrays,R,Vector,我在r中有一个数组,它有数千行和三个不同的列。对于数组中的每一行,我希望根据第一列和第三列更改第一列。具体来说,如果第三列中的数字大于第一列中的数字,则应返回1;如果第三列中的数字小于第一列中的数字,则应返回0;如果它们是相同的数字,则应随机选择1或0 temp[,1]<- sapply( temp[,1], function(score){

我在r中有一个数组,它有数千行和三个不同的列。对于数组中的每一行,我希望根据第一列和第三列更改第一列。具体来说,如果第三列中的数字大于第一列中的数字,则应返回1;如果第三列中的数字小于第一列中的数字,则应返回0;如果它们是相同的数字,则应随机选择1或0

    temp[,1]<- sapply(
                        temp[,1],
                        function(score){
                           if(temp[,3]>score){1}
                           else if(temp[,3]<score){0}else
                           else if(temp[,3]==score){sample(0:1,1)}})
temp[,1]分数){1}

else if(温度[,3]使用
ifelse

ifelse(temp[,1] < temp[,3], 1, # test condition 1, give 1 if TRUE
       ifelse(temp[,1] > temp[,3], 0, # condition 1 is FALSE, test condition 2
              rbinom(dim(temp)[1],1,.5))) # condition 2 is FALSE, return random
您将看到
temp[,1]==temp[,3]
中的所有行都具有相同的值。这与执行以下操作相同:

ifelse(temp[,1]<temp[,3],1,ifelse(temp[,1]>temp[,3],0,2))
ifelse(温度[,1]温度[,3],0,2))

使用
ifelse

ifelse(temp[,1] < temp[,3], 1, # test condition 1, give 1 if TRUE
       ifelse(temp[,1] > temp[,3], 0, # condition 1 is FALSE, test condition 2
              rbinom(dim(temp)[1],1,.5))) # condition 2 is FALSE, return random
您将看到
temp[,1]==temp[,3]
中的所有行都具有相同的值。这与做类似的事情是一样的:

ifelse(temp[,1]<temp[,3],1,ifelse(temp[,1]>temp[,3],0,2))
ifelse(温度[,1]温度[,3],0,2))

这也可以使用算术而不是条件来完成:

rbinom(nrow(temp), 1, (temp[,1]<temp[,3])+(temp[,1]==temp[,3])*0.5)

rbinom(nrow(temp),1,(temp[,1]这也可以使用算术而不是条件来完成:

rbinom(nrow(temp), 1, (temp[,1]<temp[,3])+(temp[,1]==temp[,3])*0.5)

rbinom(nrow(temp),1,(temp[,1]thomas我刚刚试过这段代码,它工作得很好。你能解释一下为什么第二个ifelse会嵌入第一个ifelse中吗?你为什么要做rbinom(dim(temp)[1])我想这意味着我的每一行都有随机数?更新了一些额外的解释。啊,我明白了。我来自python,我使用循环列表来解决这个问题。我更喜欢r处理向量的方式。答案接受托马斯我刚刚试过这段代码,它工作得很好。你能解释一下为什么第二行是这样吗ifelse是嵌入在第一个ifelse中的?为什么要使用rbinom(dim(temp)[1]),我想这意味着我的每一行都有随机数?更新了一些额外的解释。啊,我明白了。我来自python,我使用循环列表来解决这个问题。我更喜欢r处理向量的方式。答案被接受