r - 相对于每组的其他列拆分列值
问题描述
所以我有一个数据表,如:
我需要在每个 id-group 的 value2 关系中打破 value1
索引 1,2,3 是同一 id 的组因 -> value2 在组中的关系是 0.7((14+2+4)/14) 所以 value1 需要是 7000 -> 索引 2: value1=1000 , 索引 2: value2=2000 -> sum=10000
数据表需要如下所示:
解决方案
你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 <- 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
推荐阅读
- swift - 如何在 Swift 数组中存储闭包
- ios - 如何使用 Swift 4 在 UICollection 视图中进行多项选择
- java - java将函数添加到扩展类
- c# - 支持 Windows Server 2016 活动目录?
- c++ - opengl 着色器坐标系
- apache - Apache 访问日志文件奇怪
- mysql - MySQL 中的字符集和排序规则优先级
- java - 大型 OpenJPA query.getResutList() 包装器以避免 List
然后迭代 - python - 将字符串列表转换为逗号分隔的 2D NumPy
- makefile - 出错)对 std::__cxx11::basic_string 的未定义引用