首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: mutate()在select()之后使用chaining

R: mutate()在select()之后使用chaining
EN

Stack Overflow用户
提问于 2014-11-26 13:58:07
回答 1查看 1.1K关注 0票数 2
代码语言:javascript
复制
require('dplyr')
set.seed(8)
df <- data.frame(v1=rnorm(5),
                 v2=rnorm(5),
                 v3=rnorm(5))

如果我计算上面的值的数目,例如0,并将其放入新的列中,我将这样做:

代码语言:javascript
复制
mutate(df, n=apply(df,1,function(x)sum(x>0)))

这将使:

代码语言:javascript
复制
       v1         v2          v3 n
1 -0.08458607 -0.1078814 -0.75979380 0
2  0.84040013 -0.1702891  0.29204986 2
3 -0.46348277 -1.0883317  0.42139859 1
4 -0.55083500 -3.0110517 -1.29448908 0
5  0.73604043 -0.5931743  0.06928509 2

现在,我希望在链接中使用dplyr,并在列的子集v1v2上使用相同的内容,但无法确定如何给出正确的数据。如果我这么做了(在再次创建df之后):

代码语言:javascript
复制
df %>%
   select(v1, v2) %>%
   mutate(n=apply(df,1,function(x)sum(x>0)))

...Gives与上面的相同(相同的n,即对所有三列进行计数),同时用.传递数据,或者只是空白:不起作用。

代码语言:javascript
复制
df %>%
   select(v1, v2) %>%
   mutate(n=apply(.,1,function(x)sum(x>0)))

或者:

代码语言:javascript
复制
df %>%
   select(v1, v2) %>%
   mutate(n=apply(1,function(x)sum(x>0)))

出什么事了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-26 14:01:03

在使用select对所需列进行细分之后,应用rowwise()函数,然后使用do。这里,.指的是我们在select步骤之后得到的数据。当我们执行sum(.>0)时,它将在新数据集的每一行上应用该函数。最后,我们data.frame(., n=..),获取前面所有的列以及新创建的n

代码语言:javascript
复制
df %>% 
   select(v1, v2) %>% 
   rowwise() %>% 
   do(data.frame(., n=sum(.>0)))
#           v1         v2 n
#1 -0.08458607 -0.1078814 0
#2  0.84040013 -0.1702891 1
#3 -0.46348277 -1.0883317 0
#4 -0.55083500 -3.0110517 0
#5  0.73604043 -0.5931743 1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27151046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档