将列值除以 R 中多列的唯一数量
Dividing a column value by unique number of multiple columns in R
我需要将 Area 和 Prm 列中的值除以唯一的列数 (YEAR DIV POL ST CTY CR PL YID LID DATE)
。
R 中有实现此功能的函数吗?
提前致谢。
Table:
Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
Output:
Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
Table 和 Output 的区别在于 Area 和 PRm 列的第 2,3 和 4 行。
Area 和 Prm 列(300 和 3000)中的值除以 3(因为 YEAR DIV POL ST CTY CR PL YID LID DATE 列在第 2,3 和 4 行中相同)。因此,Area 和 PRm 列中的值除以 3(Area 列中的 300 / 3 = 100,输出中第 2,3 行和 PRm 列中的 3000 / 3 = 1000 table.
S1 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 271.2 311.5
与 dplyr
:
df1 %>% add_count(YEAR,DIV,POL,ST,CTY,CR,PL,YID,LID,DATE) %>%
mutate(Area = Area /n) %>%
select(-n)
输出
# # A tibble: 5 x 15
# Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
# <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <dbl> <int> <dbl> <dbl>
# 1 S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
# 2 S1 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 316.1 309.2
# 3 S16 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 391.2 201.5
# 4 S2 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 271.2 311.5
# 5 S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
数据
df1 <- read.table(text="Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5",header=T,stringsAsFactors=F)
我需要将 Area 和 Prm 列中的值除以唯一的列数 (YEAR DIV POL ST CTY CR PL YID LID DATE)
。
R 中有实现此功能的函数吗?
提前致谢。
Table:
Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
Output:
Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
Table 和 Output 的区别在于 Area 和 PRm 列的第 2,3 和 4 行。
Area 和 Prm 列(300 和 3000)中的值除以 3(因为 YEAR DIV POL ST CTY CR PL YID LID DATE 列在第 2,3 和 4 行中相同)。因此,Area 和 PRm 列中的值除以 3(Area 列中的 300 / 3 = 100,输出中第 2,3 行和 PRm 列中的 3000 / 3 = 1000 table.
S1 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 100 1000 271.2 311.5
与 dplyr
:
df1 %>% add_count(YEAR,DIV,POL,ST,CTY,CR,PL,YID,LID,DATE) %>%
mutate(Area = Area /n) %>%
select(-n)
输出
# # A tibble: 5 x 15
# Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
# <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <dbl> <int> <dbl> <dbl>
# 1 S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
# 2 S1 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 316.1 309.2
# 3 S16 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 391.2 201.5
# 4 S2 2005 7 4077 15 205 11 90 4 2 9202004 100 3000 271.2 311.5
# 5 S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5
数据
df1 <- read.table(text="Tag YEAR DIV POL ST CTY CR PL YID LID DATE Area PRm SEP1 SEP2
S25 2005 7 3068 15 205 11 44 4 2 9042004 799 4504 326.9 296.6
S1 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 316.1 309.2
S16 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 391.2 201.5
S2 2005 7 4077 15 205 11 90 4 2 9202004 300 3000 271.2 311.5
S28 2005 7 3180 15 205 11 44 5 6 9202004 651 1747 251.2 382.5",header=T,stringsAsFactors=F)