首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在所有变量中应用` `dplyr::rowwise`‘

在所有变量中应用` `dplyr::rowwise`‘
EN

Stack Overflow用户
提问于 2019-04-30 13:55:14
回答 2查看 941关注 0票数 2

我有一个数据:

代码语言:javascript
运行
复制
df_1 <- data.frame(
  x = replicate(4, runif(30, 20, 100)), 
  y = sample(1:3, 30, replace = TRUE)
)

以下功能工作:

代码语言:javascript
运行
复制
library(tidyverse)

df_1 %>% 
  select(-y) %>% 
  rowwise() %>% 
  mutate(var = sum(c(x.1, x.3)))

但是,以下函数(对于所有变量)都不起作用:

.**:**的

代码语言:javascript
运行
复制
df_1 %>% 
  select(-y) %>% 
  rowwise() %>% 
  mutate(var = sum(.))

select_if**:**的

代码语言:javascript
运行
复制
df_1 %>% 
  select(-y) %>% 
  rowwise() %>% 
  mutate(var = sum(select_if(., is.numeric)))

这两种方法都返回:

代码语言:javascript
运行
复制
Source: local data frame [30 x 5]
Groups: <by row>

# A tibble: 30 x 5
     x.1   x.2   x.3   x.4   var
   <dbl> <dbl> <dbl> <dbl> <dbl>
 1  32.7  42.7  50.1  20.8 7091.
 2  75.9  71.3  83.6  77.6 7091.
 3  49.6  28.7  97.0  59.7 7091.
 4  47.4  96.1  31.9  79.7 7091.
 5  54.2  47.1  81.7  41.6 7091.
 6  27.9  58.1  97.4  25.9 7091.
 7  61.8  78.3  52.6  67.7 7091.
 8  85.4  51.3  38.8  82.0 7091.
 9  27.9  72.6  68.9  25.2 7091.
10  87.2  42.1  27.6  73.9 7091.
# ... with 20 more rows

其中7091是一个不正确的和。

如何调整这一职能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 19:34:51

这可以使用purrr::pmap完成,它将参数列表传递给接受“点”的函数。由于像meansd等大多数函数都使用向量,所以需要将调用与域提升器配对。

代码语言:javascript
运行
复制
df_1 %>% select(-y) %>% mutate( var = pmap(., lift_vd(mean)) )
#         x.1      x.2      x.3      x.4      var
# 1  70.12072 62.99024 54.00672 86.81358 68.48282
# 2  49.40462 47.00752 21.99248 78.87789 49.32063

df_1 %>% select(-y) %>% mutate( var = pmap(., lift_vd(sd)) )
#         x.1      x.2      x.3      x.4      var
# 1  70.12072 62.99024 54.00672 86.81358 13.88555
# 2  49.40462 47.00752 21.99248 78.87789 23.27958

函数sum直接接受点,因此不需要取消它的域:

代码语言:javascript
运行
复制
df_1 %>% select(-y) %>% mutate( var = pmap(., sum) )
#         x.1      x.2      x.3      x.4      var
# 1  70.12072 62.99024 54.00672 86.81358 273.9313
# 2  49.40462 47.00752 21.99248 78.87789 197.2825

所有内容都符合标准的dplyr数据处理,因此可以将这三个参数作为单独的参数组合到mutate

代码语言:javascript
运行
复制
df_1 %>% select(-y) %>% 
  mutate( v1 = pmap(., lift_vd(mean)),
          v2 = pmap(., lift_vd(sd)),
          v3 = pmap(., sum) )
#         x.1      x.2      x.3      x.4       v1       v2       v3
# 1  70.12072 62.99024 54.00672 86.81358 68.48282 13.88555 273.9313
# 2  49.40462 47.00752 21.99248 78.87789 49.32063 23.27958 197.2825
票数 4
EN

Stack Overflow用户

发布于 2019-06-21 13:13:52

这是一个棘手的问题,因为dplyr在许多操作中按列操作。最初,我从基R中使用apply对行进行应用,但apply处理字符和数字类型时出现问题

相反,我们可以使用(老化的) plyr adply来简单地完成这一任务,因为plyr允许我们将一行数据帧作为向量对待:

代码语言:javascript
运行
复制
df_1 %>% select(-y) %>% adply(1, function(df) c(v1 = sd(df[1, ])))

注意,一些像var这样的函数不能在单行数据框架上工作,所以我们需要使用as.numeric将其转换为向量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55922514

复制
相关文章

相似问题

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