循环使用if语句应用函数的数据帧行

循环使用if语句应用函数的数据帧行

本文介绍了循环使用if语句应用函数的数据帧行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我是R的新手,如果要求和的元素满足一个给定的条件,我正在试图求和给定数据帧的2列。为了使事情清晰,我想做的是:I'm new to R and I'm trying to sum 2 columns of a given dataframe, if both the elements to be summed satisfy a given condition. To make things clear, what I want to do is:> t.d<-as.data.frame(matrix(1:9,ncol=3))> t.d V1 V2 V3 1 4 7 2 5 8 3 6 9> t.d$V4<-rep(0,nrow(t.d))> for (i in 1:nrow(t.d)){+ if (t.d$V1[i]>1 && t.d$V3[i]<9){+ t.d$V4[i]<-t.d$V1[i]+t.d$V3[i]}+ }> t.d V1 V2 V3 V4 1 4 7 0 2 5 8 10 3 6 9 0我需要一个高效的代码,因为我的真实数据框有大约150000行和200列。这会给出错误:I need an efficient code, as my real dataframe has about 150000 rows and 200 columns. This gives an error:t.d$V4<-t.d$V1[t.d$V1>1]+ t.d$V3[t.d$V3>9]是否应用一个选项?我试过这个:Is "apply" an option? I tried this:t.d<-as.data.frame(matrix(1:9,ncol=3))t.d$V4<-rep(0,nrow(t.d))my.fun<-function(x,y){ if(x>1 && y<9){ x+y}}t.d$V4<-apply(X=t.d,MAR=1,FUN=my.fun,x=t.d$V1,y=t.d$V3)但它也给出错误。 非常感谢您的帮助。but it gives an error as well.Thanks very much for your help.推荐答案此操作不需要循环,应用语句或if语句。矢量化的操作和子集是所有你需要的:This operation doesn't require loops, apply statements or if statements. Vectorised operations and subsetting is all you need:t.d <- within(t.d, V4 <- V1 + V3)t.d[!(t.d$V1>1 & t.d$V3<9), "V4"] <- 0t.d V1 V2 V3 V41 1 4 7 02 2 5 8 103 3 6 9 0 为什么这样工作?Why does this work?在第一步中,我创建一个列的直线总和为和V4。我在中使用作为一种方便的方式来引用 df 的列,而不必写入 df $ V 所有的时间。In the first step I create a new column that is the straight sum of columns V1 and V4. I use within as a convenient way of referring to the columns of d.f without having to write d.f$V all the time.在第二个步骤中,我将所有不符合条件的行进行子集,并将V4设置为这些到0。In the second step I subset all of the rows that don't fulfill your conditions and set V4 for these to 0. 这篇关于循环使用if语句应用函数的数据帧行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
09-05 17:54