【发布时间】:2013-10-16 14:31:44
【问题描述】:
我的数据如下所示
> head(CPUE)
Lon.rect Lat.rect q1 q4
1 13.5 54.25 0.1930234 1.76096260
2 13.5 54.75 11.6866331 19.06265440
3 13.5 55.25 24.2532215 33.64530930
4 13.5 55.75 0.2113688 0.05731537
5 14.5 54.25 2.5600818 8.72482876
6 14.5 54.75 85.8657297 34.08524869
现在,我想做的是创建一个新列,其中包含多个类别(级别),基于子集“Lon.rect”和“Lat.rect”的数据组合。我想根据每列中的数据为类别命名不同的名称。例如对于 Lon.rect = 13.5, Lat.rect = 54.25,新列中的类别名称将为“1A”,而在第二行中,类别名称为“1B”,因为 Lat.rect 包含不同的数据。第 5 行将是“2A”,依此类推。
"Lon.rect" & "Lat.rect" 包含坐标(如果这对任何人都重要的话)并且还有更多的组合。从 Lot 13.5 到 22.5 和 Lat 54.25 到 58.75。
我通过以下方式创建了一个名为“subdiv”的新列:
CPUE["subdiv"] <- NA
整个数据集现在看起来:
> head(CPUE)
Lon.rect Lat.rect q1 q4 subdiv
1 13.5 54.25 0.1930234 1.76096260 NA
2 13.5 54.75 11.6866331 19.06265440 NA
3 13.5 55.25 24.2532215 33.64530930 NA
4 13.5 55.75 0.2113688 0.05731537 NA
5 14.5 54.25 2.5600818 8.72482876 NA
6 14.5 54.75 85.8657297 34.08524869 NA
我知道我可以像下面这样输入所有内容,但这需要很长时间,因为它需要大量数据。
CPUE$subdiv[CPUE$Lon.rect>=13 & CPUE$Lon.rect<=14 & CPUE$Lat.rect>=54.0 & CPUE$Lat.rect<=54.5] <- "1A"
CPUE$subdiv[CPUE$Lon.rect>=13 & CPUE$Lon.rect<=14 & CPUE$Lat.rect>=54.5 & CPUE$Lat.rect<=55.0] <- "1B"
CPUE$subdiv[CPUE$Lon.rect>=13 & CPUE$Lon.rect<=14 & CPUE$Lat.rect>=55.0 & CPUE$Lat.rect<=55.5] <- "1C"
我希望我的描述很清楚,否则不要犹豫与我联系! 如果有人对任何步骤有好的解决方案,请回信! 谢谢! /菲利普
编辑:
关于我的问题的更多信息
上面列的名称; “1A”、“1B”和“2A”只是说明我希望源列之间的关系如何的示例,我真的想给它们命名其他东西,但是如果有人感兴趣,我在下面得到了一些很好的帮助这个。
就我而言,我想在从 37 开始的整数之后命名 Lat.rect 列。Lon.rect 会有点棘手。该名称由一个字母和一个数字组成,从 G3 开始(在本例中)。每个字母的最大数字是 9,然后下一个字母从 0 开始,所以 G9 之后的下一个名称是 H0。
如果有帮助,我不需要脚本来为整个字母表进行这种组合。最小可能的组合(我所有的数据集,目前不需要)是 F9,最大是 H9。
我还希望首先使用 lat 名称,然后使用 lon 名称。如果首先交换 data.frame 中列的位置然后创建名称会更容易,那就没问题了。
第一行的最终组合是“37G3”,然后是第二行“38G3”。第 5 行将是“37G4”。
如果有人能帮助我完成第二部分,我将不胜感激!
【问题讨论】:
-
您可以使用
paste和factor,而不是命名新列。with(CPUE, factor(paste(Lon.rect, Lat.rect)))。如果您尝试首先“分桶”您的数字坐标,请使用cut。 -
嗨,问题是我不想将新列中的类别命名为与源列相同。我想给他们一个不同的名字,但仍然基于源的级别。不过谢谢!这在其他情况下可能会有所帮助。我没有真正得到
cut功能,抱歉。我是新手。我刚收到回复“'x' 必须是数字”。
标签: r calculated-columns