HSum up数据帧中在R中具有相同属性的行

HSum up数据帧中在R中具有相同属性的行,r,R,我希望这个问题没有被问过两次(第一次使用) 我有一个名为data2003的数据帧,为了简单起见,我会说它看起来像这样: ID Weight North South 1 0.5 1 0 2 0.7 0 1 3 1.0 0 1 4 1.4 0 1 5 .95 1 0 6 1.1 1 0 我想在weight列中添加对应于

我希望这个问题没有被问过两次(第一次使用)

我有一个名为data2003的数据帧,为了简单起见,我会说它看起来像这样:

ID   Weight   North   South
1    0.5      1       0
2    0.7      0       1
3    1.0      0       1
4    1.4      0       1
5    .95      1       0
6    1.1      1       0

我想在weight列中添加对应于North和South伪变量的值——因此,当同一行中的North值为1时,只在计数中包含weight

我所做的是为南北方向创建子集:

subset2003N <- subset(data2003, data2003$North == 1 )
sum2003N <-sum(subset2003N$Weight)

subset2003N如果
North
South
相互排斥,最好将它们作为一列。您可以使用Reformae2和dplyr来帮助您:

library(reshape2)
library(dplyr)

melt(data2003, c("ID", "Weight")) %>% 
  filter(value == 1) %>% 
  group_by(variable) %>% 
  summarize(Weight = sum(Weight))
#> # A tibble: 2 x 2
#>   variable Weight
#>   <fct>     <dbl>
#> 1 North      2.55
#> 2 South      3.10
library(重塑2)
图书馆(dplyr)
熔体(data2003,c(“ID”,“重量”))%>%
过滤器(值==1)%>%
分组依据(变量)%>%
汇总(权重=总和(权重))
#>#tibble:2x2
#>可变重量
#>        
#>1北2.55
#>2南3.10

此解决方案还应适用于多个区域。您需要将任何其他测量变量添加到实际数据中的
melt
调用中。

这里是一个
tidyverse
解决方案

data2003 %>%
  pivot_longer(
    cols = -c(ID, Weight),
    names_to = 'dir',
    values_to = 'value'
  ) %>%
  group_by(dir) %>%
  summarise(Sum = sum(Weight*value))
## A tibble: 2 x 2
#  dir     Sum
#  <chr> <dbl>
#1 North  2.55
#2 South  3.10
data2003%>%
再长一点(
cols=-c(ID,重量),
name_to='dir',
值_to='value'
) %>%
分组依据(目录)%>%
总结(总和=总和(权重*值))
##一个tibble:2x2
#迪尔森
#   
#1北2.55
#2南3.10

不错。我认为这里的
pivot\u更长
与我的答案中的
melt
做了相同的事情,所以最大的区别是使用1和0作为
权重的倍数
,而不是使用
过滤器
-对吗?@AllanCameron是的,你是。我没有想到先过滤然后对权重求和。