如何访问R的链接数据表中的行名

问题描述

有时我们需要行名来创建一个新列,该列是前几列的功能,但仅针对一行(每行)进行汇总。换句话说,该功能跨行运行。

考虑一下:

library(data.table)
library(geosphere)

dt <- data.table(lon=77+rnorm(100),lat=13 + rnorm(100),i.lon=77+rnorm(100),i.lat=13 + rnorm(100))
dt[,dist:=distGeo(p1=c(lon,lat),p2=c(i.lon,i.lat)),by=rownames(dt)] # correct

第二行代码可以很好地工作,因为数据。表名dt放在方括号内(对我来说,它本身看起来不太优雅),但并非总是如此。

如果有data.tables链怎么办?考虑上一个示例的扩展:

dt[lon>77 & lat<12.5][,by=rownames(dt)] # incorrect

很显然,这是不正确的用法,因为rownames(dt)的长度与内部传递给下一链的子集data.table的长度不同。

我想我更大的问题是:rownames()是实现每一行摘要的唯一方法吗?如果不是,那么具体问题仍然存在:如果{。{1}}结构中的data.table是链接的data.table,我们如何访问它?

解决方法

尝试cbind

dt <- data.table(lon=77+rnorm(100),lat=13 + rnorm(100),i.lon=77+rnorm(100),i.lat=13 + rnorm(100))
dt[,dist:=distGeo(p1=cbind(lon,lat),p2=cbind(i.lon,i.lat))]
# correct : 100 lines
dt[lon>77 & lat<12.5][,i.lat))]
# also correct : 16 lines

:=适用于每一行而无需进行汇总。
cbind允许向函数提供扩展的n * 2 lat-lon矩阵。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...