我想知道是否有类似subset
函数的东西,但是对于赋值而不是提取。我常常需要做一些像
rows <- # some condition
df$x[rows] <- with(df[rows, ], {
# operation 1...
})
df$y[rows] <- with(df[rows, ], {
# operation 2...
})
在我看来,能够写
会很好subset(df, rows, c(x, y)) <- (some expression combining operations 1 and 2)
那里有这样的东西吗?
编辑:一些背景。在SAS中,可以编写像
这样的数据处理代码if /* condition */ then do;
x = ...; y = ...; z = ...;
end;
else if /* some other condition */ then do;
x = ...; y = ...; z = ...;
end;
else if /* etcetera */
我基本上是在寻找最简单/最优雅的方式在R中复制它。直接翻译将涉及数据框中所有行的for循环,显然我宁愿不这样做。
答案 0 :(得分:2)
请记住,subset
只是最重要的糖。因此,为什么不使用[
提供的“基本”子集:
df[rows, c("x", "y")]<-with(df[rows,], {...})
这会为你减少吗?
答案 1 :(得分:0)
关于SAS-ish处理,如果行的顺序不相关:
ifelse
,但取决于
条件,可能有更好的方法。我假设这个专栏是
现在命名为“proctype”加载plyr
,并使用ddply
类似于:
ddply(df, .(proctype), function(curdf){
#you can use with/within here with curdf
curproctype <- curdf$proctype[1]
switch(curproctype, #note: may be easier to just use an if here
nameoffirstproctypelevel = firstkindofprocessing(curdf),
nameofsecondproctypelevel = secondkindofprocessing(curdf))
})