使用ddply合并R中的重复行
您好我正在尝试使用ddply在R中合并重复的数据行。 这里是我处理的数据的一个例子:使用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
我没有得到来自ddply(df, "name", numcolwise(sum))
呼叫election.count
输出的,只有name
和age
(作为和)。
也就是说,您可以使用.(col1, col2)
语法在plyr
函数中按多列进行分组。举例来说,我认为这可以让你想要的东西:
ddply(df, .(name, age), nrow)
# name age V1
# 1 Bob 29 1
# 2 Bob 30 2
# 3 Dillan 25 1
# 4 Mary 20 2
谢谢最大这实际上完美的作品。我甚至没有想过让R创建一个新的行,发现重复的次数! –
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
更新: @大卫是正确的。 count
是一个更简单的选择。 :)
也可以'df%>%count(姓名,年龄)' –
@DavidRobinson Ahha,我差点忘了'count'。这里好多了。 – Hao
您还可以设置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
您也可以包含分组变量'地址'以获得预期的输出。使用data.table
,我们将'data.frame'转换为'data.table'(setDT(df)
),按'name','age','address'分组,我们得到了nrow(.N
)。
library(data.table)
setDT(df)[, list(election.count=.N), .(name, age, address)]
# name age address election.count
#1: Bob 30 123 Fake Street 2
#2: Mary 20 321 Park Ave 2
#3: Dillan 25 49 Rodeo Drive 1
#4: Bob 29 10 Broadway 1
玛丽40是一个错字吗?你总结年龄? –
是的,这是一个错字,我会纠正这个错误 –
我不会对所有的年龄总结。这是我的代码的问题之一。 –