R 相对于每个组的其他列拆分列值
因此,我有一个数据表,如: 我需要在每个id组的value2关系中打破value1 索引1,2,3是相同id的组原因->组中value2的关系为0.7((14+2+4)/14) 所以value1需要是7000->index 2:value1=1000,index 2:value2=2000->sum=10000 datatable需要如下所示:R 相对于每个组的其他列拆分列值,r,datatable,formatting,R,Datatable,Formatting,因此,我有一个数据表,如: 我需要在每个id组的value2关系中打破value1 索引1,2,3是相同id的组原因->组中value2的关系为0.7((14+2+4)/14) 所以value1需要是7000->index 2:value1=1000,index 2:value2=2000->sum=10000 datatable需要如下所示: 使用dplyr您可以这样尝试: df <- data.frame(index = 1:6, id = c(&q
使用
dplyr
您可以这样尝试:
df <- data.frame(index = 1:6,
id = c("abc", "abc", "abc", "def", "ghi", "ghi"),
value = c(10000,10000,10000,50000, 20000, 20000),
value2 = c(14,2,4,6,3,3))
df %>%
group_by(id) %>%
mutate(value = value*(value2/sum(value2)))
index id value value2
<int> <fct> <dbl> <dbl>
1 1 abc 7000 14
2 2 abc 1000 2
3 3 abc 2000 4
4 4 def 50000 6
5 5 ghi 10000 3
6 6 ghi 10000 3
df%
分组依据(id)%>%
变异(值=值*(值2/和(值2)))
索引id值值2
1 abc 7000 14
2 abc 1000 2
3 abc 2000 4
4 def 50000 6
5 ghi 10000 3
6 ghi 10000 3
编辑:这是您提到的扩展名
df <- data.frame(index = 1:6,
id = c("abc", "abc", "abc", "def", "ghi", "ghi"),
value = c(10000,10000,10000,50000, 20000, 20000),
value2 = c(14,NA,4,6,NA, NA))
df %>%
group_by(id) %>%
mutate(value2 = ifelse(!all(is.na(value2)) & is.na(value2), 0,
value2)) %>%
mutate(value = ifelse(is.na(value2),
value/length(value2),
value*(value2/sum(value2))))
index id value value2
<int> <fct> <dbl> <dbl>
1 1 abc 7778. 14
2 2 abc 0 0
3 3 abc 2222. 4
4 4 def 50000 6
5 5 ghi 10000 NA
6 6 ghi 10000 NA
df%
分组依据(id)%>%
mutate(value2=ifelse(!all(is.na(value2))&is.na(value2),0,
值2))%>%
变异(value=ifelse)(is.na(value2),
值/长度(值2),
值*(值2/总和(值2)))
索引id值值2
1 abc 7778。14
2 abc 0 0
3 abc 2222。4.
4 def 50000 6
5 ghi 10000纳
6 ghi 10000纳
欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助你。除此之外,“值2”列可能没有数据。如果一个id组的所有Value2都没有数据,则value1应分成相同的部分(例如50:50和2个id)。如果一个或多个value2具有值,则value2中没有数据的组的其他id应被视为value2=0,您知道如何做到这一点吗?