【问题标题】:How can I match and filter a dataset using another one?如何使用另一个数据集匹配和过滤数据集?
【发布时间】:2020-09-21 20:25:28
【问题描述】:

我真的不知道该怎么问,所以让我举个例子。

我有一个数据集,其中包含超过 5 万个条目,包括地址。像这样

streets <- c("st1","st2","st3","st4","st10000","st50000")

我需要将此街道名称与它们所属的城市相匹配。当它看到“st1”时,它应该添加 CityX。我没有数据集,所以我创建了一个这样的。

cities <- data.table(
  city1 <- c("st1","st2","st3"),
  city2 <- c("st4","st5","st6"),
  city3 <- c("st50","st10000","st50000")
  )

setnames(cities,"V1","NY")
setnames(cities,"V2","LA")
setnames(cities,"V3","DC")

现在我想匹配这个数据集,如果城市包含街道名称,它应该在“街道”中创建一个新列并在那里添加城市名称。应该是这样看的:

streets2 <- data.table(streets <- c("st1","st2","st3","st4","st10000","st50000"),
c("NY","NY","NY", "LA","DC","DC"))

我应该提一下,我不能使用 dpylr 只允许使用 data.table。我想我需要使用 for loop 和 lapply 但我知道如何。谢谢。

【问题讨论】:

  • 你真的有这种形式的数据作为一个逗号分隔的字符串吗?
  • 我有一个庞大的数据集,其中 1 列中有超过 55k 个条目...我一直在创建另一个数据集来对这些值进行分类。
  • 您应该分享一个准确代表您的数据的示例,否则您将难以将答案应用于您的数据。请阅读有关how to ask a good question 的信息以及如何提供reproducible example
  • 好的,我现在就试试吧。
  • 为什么要将输出作为逗号分隔的字符串?

标签: r for-loop data.table


【解决方案1】:

这是一个选项:

teams <- c("barcelona","rmadrid","liverpool")
DT <- rbindlist(lapply(mget(teams), function(x) data.table(Player=trimws(strsplit(x,",")[[1L]]))),
    idcol="Team")

data.table(Player=strsplit(players, ",")[[1L]])[DT, on=.(Player), Team := Team][]

输出:

     Player      Team
 1:    Xavi barcelona
 2:   Puyol barcelona
 3: Iniesta barcelona
 4:   Messi barcelona
 5: Gerrard liverpool
 6:   Salah liverpool
 7:    Mane liverpool
 8: Ronaldo   rmadrid
 9:   Ramos   rmadrid
10:  Hazard   rmadrid

哈维、普约尔和杰拉德不是都退役了吗?罗纳尔多还在皇马吗?

数据:

players <- "Xavi,Puyol,Iniesta,Messi,Gerrard,Salah,Mane,Ronaldo,Ramos, Hazard"
barcelona <- "Xavi,Puyol,Iniesta,Messi"
rmadrid <- "Ronaldo,Ramos,Hazard"
liverpool <- "Gerrard,Salah,Mane"

【讨论】:

  • 是的,我对足球不太感兴趣,但我找不到更好的例子 :) 这对我不起作用。我想我无法正确表达自己。让我试着解决这个问题。我有一列(dataset1),其中包含 50k+ 个条目,其中一些是重复值。我必须对此进行分类,但我没有另一个数据集,所以我创建了一个包含 50 多个类别和 dataset1 中每个不同值的数据集。因此,当 R 在 dataset1 中看到“xxx1”时,它应该在 dataset2 中查找它,如果匹配,则将其类别值添加到“xxx1”附近。就像我说的那样,我可能需要 lapply 和 for 循环,但是 idk。
猜你喜欢
  • 2019-06-12
  • 2022-11-15
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2013-09-13
  • 2016-09-05
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多