R按列表中的$访问数据

时间:2018-04-20 14:19:32

标签: r subset

我知道我可能缺乏一些基本知识。 但是,有人可以澄清为什么相同的结构在一个代码中工作但在另一个代码中不起作用吗?

数据:

> head(Countries)
   LocID NamePrint TreeLevel TypeNameShort IsSmallCountry ParentID
15   1   A         4         Country              0       10
16   2   B         4         Country              0       10
17   3   C         4         Country              0       10
18   4   D         4         Country              0       10
19   5   E         4         Country              0       10
20   6   F         4         Country              0       10

序列:

CountryIdx <- 1
Location <- Countries[CountryIdx,,drop=F]
ParentLocation <- subset(Locations, LocID==Location$ParentID)
GrandParentLocation <- subset(Locations, LocID==ParentLocation$ParentID)

> typeof(Location)
[1] "list"

> typeof(ParentLocation)
[1] "list"

> typeof(GrandParentLocation)
[1] "list"

> class(Location)
[1] "data.frame"

> class(ParentLocation)
[1] "data.frame"

> Location
   LocID NamePrint TreeLevel TypeNameShort IsSmallCountry ParentID
15   1   A         4         Country             0        10

> ParentLocation
   LocID NamePrint TreeLevel TypeNameShort IsSmallCountry ParentID
14   10  XF        3         Unknown             0        30

现在出现问题:

PropUrbanRuralCountry <- subset(PropUrbanRural, LocID==Location$LocID)

以上一行:Error in Location$LocID : $ operator is invalid for atomic vectors

> PropUrbanRuralCountry <- subset(PropUrbanRural, LocID==ParentLocation$LocID)

上面的行

如果Location和ParentLocation都是列表,而子集使用相同的数据,为什么一个失败而另一个没有?

理想情况下,我希望始终使用$,但我无法找出相同类型的数据(列表)的原因。我希望R可以简化他的。

1 个答案:

答案 0 :(得分:1)

正如@MrFlick在评论中指出的那样,PropUrbanRural数据集有一个名为Location的列,导致R引用该列而不是单独的Location数据集。我重命名了该列,现在它可以工作了。谢谢@MrFlick。