【问题标题】:Average only duplicated rows and replacing value in a defined column仅平均重复行并替换定义列中的值
【发布时间】:2020-07-12 08:14:46
【问题描述】:

我有一个数据框D:

surname   name   salary
Red        A      1000
Green      B       900
Green      A      1100
Blue       C      1000
Blue       B      1000
Blue       F       800
Violet     F      1200

某些行在surname 中没有复制,其他一些是。

我只需要聚合姓氏重复的行,以平均工资并将名称更改为“X”。

我使用duplicated() 尝试了一些东西,但它保留了一个副本作为原始副本并更改了其他的。

D$name<-replace(D$name,duplicated(D$surname),"X")

而且我也无法平均 salary 的值。

谢谢!

【问题讨论】:

    标签: r duplicates aggregate rename mean


    【解决方案1】:

    我们可以使用

    D$name <- replace(D$name,duplicated(D$surname)|duplicated(D$surname, 
              fromLast = TRUE),"X")
    

    如果我们需要创建一个平均列

    library(dplyr)
    D %>% 
       group_by(surname) %>% 
       mutate(average = mean(salary))
    

    数据

    D <- structure(list(surname = c("Red", "Green", "Green", "Blue", "Blue", 
    "Blue", "Violet"), name = c("A", "B", "A", "C", "B", "F", "F"
    ), salary = c(1000L, 900L, 1100L, 1000L, 1000L, 800L, 1200L)), class = "data.frame", row.names = c(NA, 
    -7L))
    

    【讨论】:

    • 感谢 akrun,但它不会汇总平均“工资”的行。
    • 谢谢akrun,我添加D&lt;- D %&gt;% distinct(surname, .keep_all = TRUE) 删除重复项。我的预期输出是:surname name salary &lt;br/&gt; Red A 1000 &lt;br/&gt; Green X 1000 &lt;br/&gt; Blue X 933.3 &lt;br/&gt; Violet F 1200
    • @Valdarn8 在这种情况下,您可以将mutate 更改为summarise
    猜你喜欢
    • 2020-06-21
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多