Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 相对于每个组的其他列拆分列值_R_Datatable_Formatting - Fatal编程技术网

R 相对于每个组的其他列拆分列值

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

因此,我有一个数据表,如:

我需要在每个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("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,您知道如何做到这一点吗?