【发布时间】:2021-11-13 03:02:52
【问题描述】:
我有这个数据框:
Generacion 1 2 3 4 5 6 NP1 NP2 NP3 NP4 NP5 NP6
1: 1 0 0 0 0 0 0 4 4 4 4 5 5
2: 2 0 0 0 0 0 0 4 4 4 4 4 4
3: 3 0 0 0 0 0 0 5 5 5 5 5 5
4: 4 0 0 0 0 0 0 4 5 5 5 4 4
5: 5 0 0 0 0 0 0 5 4 4 4 4 4
6: 6 0 0 0 0 0 0 5 5 5 5 4 4
我想修改 1 到 6 列,以便每一列都计算右侧列中该值的出现次数 (NP1 - NP6)。也就是说,4 列应该计算4 出现的次数。我希望对每个号码重复这个过程。可以取值介于0 和5 之间的数字。最终的结果应该是这样的:
head(t2 %>% select(1, 2, 3, 4, 5, 6, 7, NP1, NP2, NP3, NP4, NP5, NP6))
Generacion 1 2 3 4 5 6 NP1 NP2 NP3 NP4 NP5 NP6
1: 1 0 0 0 4 2 0 4 4 4 4 5 5
2: 2 0 0 0 6 0 0 4 4 4 4 4 4
3: 3 0 0 0 0 6 0 5 5 5 5 5 5
4: 4 0 0 0 3 3 0 4 5 5 5 4 4
5: 5 0 0 0 5 1 0 5 4 4 4 4 4
6: 6 0 0 0 2 4 0 5 5 5 5 4 4
我已经尝试使用包data.table,我做了以下操作:
t2[NP1 == 4]$`4` <- t2[NP1 == 4]$`4` + 1
但我有以下错误:
[<-.data.table(*tmp*, NP1 == 4, value = c(1, 1, 1, 1)) 中的错误: 不能在同一查询中两次分配给同一列(检测到重复)。
所以我有两个问题:
- 为什么会出现此错误?
- 有没有更简单、更直观的方法?
【问题讨论】:
标签: r dataframe data.table