将列值除以R中的多个列的唯一数量

时间:2017-10-28 16:15:09

标签: r unique divide

我需要通过将值除以唯一列数(YEAR DIV POL ST CTY CR PL YID LID DATE)来获取Area和Prm列中的值。

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

表和输出的差异在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(区域列中的300/3 = 100,输出表中2,3和4行的PRm列中的3000/3 = 1000。

     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

1 个答案:

答案 0 :(得分:0)

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)