【问题标题】:Across with NA values跨越 NA 值
【发布时间】:2020-12-07 10:09:52
【问题描述】:

我试图使用cross来取某些列的平均值,但出现了问题 为我使用的平均值的每一列创建新的不同列。 它工作正常吗?

    library(tidyverse)
    cars %>% 
as_tibble() %>% 
add_case(speed = 11, dist = NA, .before = 1) %>% 
add_column(names = str_c("a",1:51)) %>% 
rename_with(.cols =  -names, ~str_c("one_",.x)) %>% 
group_by(names) %>% 
mutate(two = across(starts_with("one"), .fns = mean))

在小插图中它显示了这个例子:

df %>% mutate_at(vars(c(x, starts_with("y"))), mean)
# ->
df %>% mutate(across(c(x, starts_with("y")), mean, na.rm = TRUE))

我希望在每种使用 NA 的情况下,它都会产生 NA 而不是另一列。

【问题讨论】:

  • 这是一个答案吗?因为我没有看到和区别。
  • 也许我不清楚。我最终希望有一个名为“two”的新列,其中我将获得其他两列的平均值

标签: r tidyverse across


【解决方案1】:

如果您想按行取两列的mean,则不一定在这里看到across 的用法。

library(dplyr)
cars %>% 
  as_tibble() %>% 
  add_case(speed = 11, dist = NA, .before = 1) %>% 
  add_column(names = str_c("a",1:51)) %>% 
  rename_with(.cols =  -names, ~str_c("one_",.x)) %>% 
  mutate(two = rowMeans(select(., starts_with('one')), na.rm = TRUE))

您可以将rowwisec_across 一起使用,但效率会低于rowMeans

cars %>% 
  as_tibble() %>% 
  add_case(speed = 11, dist = NA, .before = 1) %>% 
  add_column(names = str_c("a",1:51)) %>% 
  rename_with(.cols =  -names, ~str_c("one_",.x)) %>% 
  rowwise() %>%
  mutate(two = mean(c_across(starts_with('one')), na.rm = TRUE))

【讨论】:

  • 我想在几列但不同的组上做 rowmean。更好的是,我猜 rowMeans,试图使交叉复杂化。
  • 是的,我想这是一个更简单的选择。它解决了你的问题吗?
  • 是的,不幸的是,我一开始并没有考虑到 rowMean,它让一切变得更容易。我应该删除这个问题,因为它可能是重复的吗?
  • 如果问题重复,您不应该删除它,而是将其标记为重复问题。见meta.stackoverflow.com/questions/265736/…
猜你喜欢
  • 2021-11-13
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多