【问题标题】:Dividing a column value by unique number of multiple columns in R将列值除以R中多列的唯一数量
【发布时间】:2017-10-28 16:15:08
【问题描述】:

我需要通过将值除以唯一的列数(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

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

     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

【问题讨论】:

  • TableOutput有什么区别?
  • 我很努力,但无济于事,以理解这个问题。你可能想重铸它。
  • 对不起,如果我把它弄复杂了。请参阅上面的简化版本。
  • @user 和 Victor:请参阅上面的描述。希望我说清楚了。

标签: r unique divide


【解决方案1】:

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)

【讨论】:

  • 我在上面尝试过,但没有得到我想要的答案。我必须指定 n 吗?
  • 它对我有用,我将数据添加到我的帖子中,我提供的数据对你有用吗?
  • n 是由 count 函数创建的,所以你不必指定它
  • 我的错。我犯了一个错误。是的,它奏效了。非常感谢。
  • 我改变了我的解决方案,add_count 是一个更简单的选择(我第一次忘记了)
猜你喜欢
  • 2021-09-10
  • 2017-01-19
  • 2019-10-02
  • 1970-01-01
  • 2020-04-17
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多