HSum up数据帧中在R中具有相同属性的行
我希望这个问题没有被问过两次(第一次使用) 我有一个名为data2003的数据帧,为了简单起见,我会说它看起来像这样: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列中添加对应于
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是的,你是。我没有想到先过滤然后对权重求和。