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