【问题标题】:Simple way to pipe rowsums [duplicate]管道行和的简单方法[重复]
【发布时间】:2021-01-05 13:01:42
【问题描述】:

我有以下数据框(显示头部样本)

dput(sample)
structure(list(VR1 = c(NA, NA, 1L, NA, 0L, NA), VR2 = c(NA, 
NA, 
NA, NA, NA, NA), VR3 = c(NA, NA, 0L, NA, 0L, NA), VR4 = c(NA, 
NA, 1L, NA, 0L, NA), VR5 = c(NA, NA, 1L, NA, 1L, NA), VR6 = 
c(NA, 
NA, 0L, NA, 0L, NA), VR7 = c(NA, NA, 1L, NA, 0L, NA), VR8 = 
c(NA, 
NA, 0L, NA, 0L, NA), VR9 = c(NA, NA, 1L, NA, 1L, NA), VR10 = 
c(NA, 
NA, 1L, NA, 0L, NA), VR11 = c(NA, NA, 0L, NA, 0L, NA), VR12 = 
c(NA, 
NA, 0L, NA, 0L, NA), VR13 = c(NA, NA, 1L, NA, 0L, NA), VR14 = 
c(NA, 
NA, 1L, NA, 0L, NA), VR15 = c(NA, NA, 1L, NA, 1L, NA), VR16 = 
c(NA, 
NA, 0L, NA, 0L, NA), VR17 = c(NA, NA, 1L, NA, 0L, NA), VR18 = 
c(NA, 
NA, 1L, NA, 1L, NA), VR19 = c(NA, NA, 1L, NA, 0L, NA), VR20 = 
c(NA, 
NA, 1L, NA, 0L, NA)), row.names = c(NA, 6L), class = 
"data.frame")

我正在做很多以前的操作(例如删除列),但我没有找到将简单的行和传递到新列的函数。这是我一直在尝试的 sample <- sample %>% mutate(total = rowSums(1:20))

我一直在网上找 sum(c_across

但 R 无法识别它,尽管加载了 tidyverse 和 dplyr

【问题讨论】:

  • 一种方法是... total = rowSums(., na.rm = TRUE)

标签: r dataframe dplyr tidyverse rowsum


【解决方案1】:

dplyr 选项可以是 c_across(),但它需要一个行 ID:

library(dplyr)
#Code
sample %>% mutate(id=1:n())%>%
  rowwise(id) %>%
  mutate(total=sum(c_across(VR1:VR20),na.rm=T))

输出:

# A tibble: 6 x 22
# Rowwise:  id
    VR1 VR2     VR3   VR4   VR5   VR6   VR7   VR8   VR9  VR10  VR11  VR12  VR13  VR14  VR15  VR16
  <int> <lgl> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1    NA NA       NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
2    NA NA       NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
3     1 NA        0     1     1     0     1     0     1     1     0     0     1     1     1     0
4    NA NA       NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
5     0 NA        0     0     1     0     0     0     1     0     0     0     0     0     1     0
6    NA NA       NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
# ... with 6 more variables: VR17 <int>, VR18 <int>, VR19 <int>, VR20 <int>, id <int>, total <int>

使用的数据是您分享的dput(sample)

【讨论】:

  • 我想我的问题不是很清楚,也不是很好。我现在已经通过以下方式解决了它供任何人参考sample&lt;-sample%&gt;% replace(is.na(.), 0) %&gt;% mutate(vrat_total = rowSums(.[1:20]))我仍然不明白'c_across'命令是如何工作的以及它属于哪个包。
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多