我有一个数据帧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
我希望能够使用dplyr或其他tidyverse包计算每个行的百分比。有任何想法吗?
例如,x的输出为:
# id c1 c2 c3
# 1 a 0.1299057 0.7312607 0.1388336
# 2 b 0.3079012 0.2747772 0.4173217
# 3 c 0.356637 0.1137456 0.5296174
感谢您抽出宝贵时间。
答案 0 :(得分:2)
虽然不是最简洁,但您可以使用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