繁体   English   中英

对 R 中的多个观察行求和

[英]Summing multiple observation rows in R

我有一个数据集,其中包含 90 个变量的 4 个观测值。 观察结果是对“完全同意”到“完全不同意”类型问卷的回答,以百分比表示。 我想对所有变量的两个正面观察结果(完全且有点同意)和两个负面观察结果(完全且有点不同意)求和。 R有没有办法做到这一点?

我的数据集如下所示:

   Albania  Andorra  Azerbaijan  etc.
1  13.3     18.0     14.9        ...
2  56.3     45.3     27.2        ...
3  21.3     27.2     28.0        ...
4  8.9      9.4      5.2         ...     

我想对第 1+2 行和第 3+4 行求和,使其看起来像这样:

   Albania  Andorra  Azerbaijan  etc.
1  69.6     63.3     65.4        ...
2  30.2     36.6     33.2        ...

我真的是 R 的新手,所以我不知道如何使用 go。 我在这个网站和其他网站上找到的所有类似问题的答案要么有字符类型的观察结果,有多个行用于相同的观察结果(缺少数据),要么将所有行合并为 1 行。 我的问题不属于这些类别,我只是想折叠一些观察结果。

由于您只有四行,因此将前两行加在一起和后两行加在一起可能是最简单的。 您可以使用rbind将两个结果行粘贴到所需的数据框中:

rbind(df[1,] + df[2, ], df[3,] + df[4,])
#>   Albania Andorra Azerbaijan
#> 1    69.6    63.3       42.1
#> 3    30.2    36.6       33.2

从问题中获取的数据

df <- structure(list(Albania = c(13.3, 56.3, 21.3, 8.9), Andorra = c(18, 
45.3, 27.2, 9.4), Azerbaijan = c(14.9, 27.2, 28, 5.2)), class = "data.frame", 
row.names = c("1", "2", "3", "4"))

另一种选择是通过将每 2 行与rowsum并使用gl with k = 2就像在下面的代码中一样:

rowsum(df, gl(n = nrow(df), k = 2, length = nrow(df)))
#>   Albania Andorra Azerbaijan
#> 1    69.6    63.3       42.1
#> 2    30.2    36.6       33.2

创建于 2023-01-06,使用reprex v2.0.2

使用dplyr

library(dplyr)
 df %>%
   group_by(grp = gl(n(), 2, n())) %>% 
   summarise(across(everything(), sum))

-输出

# A tibble: 2 × 4
  grp   Albania Andorra Azerbaijan
  <fct>   <dbl>   <dbl>      <dbl>
1 1        69.6    63.3       42.1
2 2        30.2    36.6       33.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM