在这里,我想删除的条目,只有一个条目,一个给定的城市日期。举个例子,我想删除纽约和旧金山的条目,因为它们只有一个关于4-11和4-12的观测结果。
day City age
4-10 Miami 30
4-10 Miami 23
4-11 New York 24
4-12 San Francisco 30
注数据集称为DG。
我尝试使用for循环来查找天数,并了解每个除法每天的条目数,但我不知道如何处理R.Countx =0中的数组。
D = unique(DG$day)
for (i in 1:length(D))
{
for (j in 1:length(DG$age))
{
if (DG$day[j] == D{i]
{
countx[j] = 1
}
else
{
countx[j] = 0
}
}
Binded <- cbind(countx, DG)
发布于 2015-07-17 04:34:18
用你的样本数据
DG <- read.csv(text="day,City,age
4-10,Miami,30
4-10,Miami,23
4-11,New York,24
4-12,San Francisco,30")
你可以用dplyr
library(dplyr)
DG %>% group_by(day,City) %>% filter(n()>1)
或基R
DG[ave(rep(1, nrow(DG)), DG$day, DG$City, FUN=length)>1,]
都回来了
day City age
1 4-10 Miami 30
2 4-10 Miami 23
或者您可以使用data.table
(如@Frank建议的那样)
library(data.table)
setDT(DG)[,if (.N>1) .SD, by=.(City,day)]
发布于 2015-07-17 05:05:05
MrFlick先生的回答(和往常一样)很难超越,但是这里是我的更长的版本,相反,它是一种很好的方法,可以在dplyr
上进行一些实践。
这是数据文件:
DG <- data.frame(day=c('4-10', 4-10', '4-11', '4-12'), City=c('Miami', 'Miami', 'New York', 'San Francisco'), age=c(30, 23, 23, 30))
使用group_by
,我们将城市分组在一起,然后使用n()
将这些分组排入summarize
,这是一个方便的dplyr函数。
DG1 <- DG %>%
group_by(City, day) %>%
summarize(n=n())
# City day n
# Miami 4-10 2
# New York 4-11 1
# San Francisco 4-12 1
为了安全起见,将DG1
转换为常规数据格式:
DG2 <- data.frame(DG1)
然后,根据不止一次出现的内容,...and通过filter
消除不需要的行。
DG3 <- filter(DG2, n>1)
#City day n
#Miami 4-10 2
接下来,使用select
获取列(而我们只是使用filter
获取行)。这只会去掉列n
。
DG4 <- select(DG3, City, day)
#City day
#Miami 4-10
最后,我们在原始数据上使用filter
来获取所有发生多次事件的城市。这些发生多次的城市现在生活在DG4
(因此City==DG4$City
)中:
DG5 <- filter(DG, City==DG4$City)
#day City age
#4-10 Miami 30
#4-10 Miami 23
同样,我也会使用MrFlick先生的答案,但是如果您觉得自己是一条更迂回的路线,需要更多的dplyr
函数,那么您可能需要快速查看一下。
发布于 2018-09-21 11:55:03
您可以使用只出现一次的城市创建新的数据集,然后从原始数据集中删除这些城市。
library(dlypr)
city_once=count(DG,DG$City)
city_once将如下所示:
date City age
4-11 New York 24
4-12 San Francisco 30
然后从原始数据集中删除这些城市DG:
City_more=DG[!DG$City %in% city_once$City,]
City_more数据集将如下所示:
day City age
4-10 Miami 30
4-10 Miami 23
https://stackoverflow.com/questions/31468401
复制相似问题