您好我正在尝试使用ddply在R中组合重复的数据行。 以下是我正在使用的数据示例:
name <- c("Bob", "Mary", "Bob", "Dillan", "Bob", "Mary")
age <- c(30, 20, 30, 25, 29, 20)
address <- c("123 Fake Street", "321 Park Ave", "123 Fake Street", "49 Rodeo Drive", "10 Broadway", "321 Park Ave")
election.count <- c("1", "1", "1", "1", "1", "1")
df <- data.frame(name, age, address, election.count)
name age address election.count
1 Bob 30 123 Fake Street 1
2 Mary 20 321 Park Ave 1
3 Bob 30 123 Fake Street 1
4 Dillan 25 49 Rodeo Drive 1
5 Bob 29 10 Broadway 1
6 Mary 20 321 Park Ave 1
我希望将具有相同名称和年龄的行组合在一起。使用ddply我得到了
ddply(df, "name", numcolwise(sum))
name age election.count
1 Bob 89 3
2 Dillan 25 1
3 Mary 20 2
是否对ddply进行了修改,以便我能够获得
name age address election.count
1 Bob 30 123 Fake Street 1
2 Bob 29 10 Broadway 2
2 Dillan 25 49 Rodeo Drive 1
3 Mary 20 321 Park Ave 2
答案 0 :(得分:1)
library(dplyr)
df %>%
group_by(name, age) %>%
tally()
你得到了
Source: local data frame [4 x 3]
Groups: name [?]
name age n
(fctr) (dbl) (int)
1 Bob 29 1
2 Bob 30 2
3 Dillan 25 1
4 Mary 20 2
更新:
@David是对的。 count
是一个更简单的选择。 :)
答案 1 :(得分:1)
您也可以包含分组变量'address'以获得预期的输出。使用data.table
,我们将'data.frame'转换为'data.table'(setDT(df)
),按'name','age','address'分组,我们得到nrow({{ 1}})。
.N
答案 2 :(得分:0)
您也可以设置rownames。
ddply(df, .(name, age), summarize, election.count=nrow(piece))
# name age election.count
# 1 Bob 29 1
# 2 Bob 30 2
# 3 Dillan 25 1
# 4 Mary 20 2
答案 3 :(得分:-1)
我没有收到election.count
来电的ddply(df, "name", numcolwise(sum))
输出,只有name
和age
(作为总和)。
也就是说,您可以使用plyr
语法在.(col1, col2)
个函数中按多列进行分组。例如,我认为这可以得到你想要的东西:
ddply(df, .(name, age), nrow)
# name age V1
# 1 Bob 29 1
# 2 Bob 30 2
# 3 Dillan 25 1
# 4 Mary 20 2