Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
使用dplyr/plyr计算行间的百分比?_R_Dplyr_Tidyverse - Fatal编程技术网

使用dplyr/plyr计算行间的百分比?

使用dplyr/plyr计算行间的百分比?,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个数据帧x,像这样 set.seed(1) x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4)) # id c1 c2 c3 # 1 a 0.3271498 1.8415800 0.3496333 # 2 b 1.4744138 1.3157962 1.9983840 # 3 c 2.647532

我有一个数据帧x,像这样

set.seed(1)
x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4))

# id        c1        c2        c3
# 1  a 0.3271498 1.8415800 0.3496333
# 2  b 1.4744138 1.3157962 1.9983840
# 3  c 2.6475328 0.8444028 3.9316721

谢谢你抽出时间

虽然不是最简洁的,但您可以使用
tidyr
dplyr
来实现这一点

set.seed(10)
x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4))

x %>% 
  gather(variable, value, -id) %>% 
  group_by(id) %>% 
  mutate(percentage = value/sum(value)) %>% 
  select(-value) %>% 
  spread(variable, percentage)

Source: local data frame [3 x 4]
Groups: id [3]

      id        c1         c2         c3
* <fctr>     <dbl>      <dbl>      <dbl>
1      a 0.4329613 0.16112458 0.40591407
2      b 0.4502457 0.25160471 0.29814957
3      c 0.9019967 0.08077433 0.01722901
set.seed(10)
x%
聚集(变量,值,-id)%%>%
分组依据(id)%>%
变异(百分比=值/总和(值))%>%
选择(-value)%%>%
价差(可变,百分比)
来源:本地数据帧[3 x 4]
组别:id[3]
id c1 c2 c3
*                  
1 a 0.4329613 0.16112458 0.40591407
2 b 0.4502457 0.25160471 0.29814957
3 c 0.9019967 0.08077433 0.01722901
cbind(x[,1],属性表(如矩阵(x[-1]),1))
set.seed(10)
x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4))

x %>% 
  gather(variable, value, -id) %>% 
  group_by(id) %>% 
  mutate(percentage = value/sum(value)) %>% 
  select(-value) %>% 
  spread(variable, percentage)

Source: local data frame [3 x 4]
Groups: id [3]

      id        c1         c2         c3
* <fctr>     <dbl>      <dbl>      <dbl>
1      a 0.4329613 0.16112458 0.40591407
2      b 0.4502457 0.25160471 0.29814957
3      c 0.9019967 0.08077433 0.01722901