我试图有条件地替换数据表中的行值。 请考虑以下数据集摘录:
library(data.table)
txt1 <- "Date Location Measurement Scenario Var Month Decade
1960-01-01 4100103 23.3 CRU3.2 Temperature Jan 1960-1990
1960-02-01 4100103 24.1 CRU3.2 Temperature Feb 1960-1990
1960-03-01 4100103 23.6 CRU3.2 Temperature Mar 1960-1990
1960-04-01 4100103 20.4 CRU3.2 Temperature Apr 1960-1990
1960-05-01 4100103 16.2 CRU3.2 Temperature May 1960-1990
1960-06-01 4100103 16.5 CRU3.2 Temperature Jun 1960-1990"
dt <- data.table(read.table(textConnection(txt1), header=TRUE))
这只是一个样本。我的实际数据大约有250万行。
如您所见,我对多个位置进行了温度测量。 但是,使用地理编码而不是名称来标识位置,这些名称不太可读。
因此,我有另一个与地理编码和城市名称相关的数据集:
txt2 <- "GEOCODIG_M, Name
4100103, Abatiá
4100202, Adrianópolis
4100301, Agudos do Sul
4100400, Almirante Tamandaré
4100459, Altamira do Paraná
4100509, Altônia"
df <- read.csv(textConnection(txt2),sep=',', header=TRUE)
因此,我需要做的是将Location
中的字段dt
与GEOCODIG_M
中的df
进行比较,并按名称替换地理编码。
此案的预期结果将是:
Date Name Measurement Scenario Var Month Decade
1960-01-01 Abatiá 23.3 CRU3.2 Temperature Jan 1960-1990
1960-02-01 Abatiá 24.1 CRU3.2 Temperature Feb 1960-1990
1960-03-01 Abatiá 23.6 CRU3.2 Temperature Mar 1960-1990
1960-04-01 Abatiá 20.4 CRU3.2 Temperature Apr 1960-1990
1960-05-01 Abatiá 16.2 CRU3.2 Temperature May 1960-1990
1960-06-01 Abatiá 16.5 CRU3.2 Temperature Jun 1960-1990
使用数据表执行此操作的最佳方法是什么?
答案 0 :(得分:1)
有几种方法可以解决这个问题。
您只需创建一个新的“名称”变量,使用match
在txt2
中找到匹配的行。
txt1$Name <- txt2$Name[match(txt1$Location, txt2$GEOCODIG_M)]
或者,您可以合并两个数据集
txt3 <- merge(txt1, txt2, by.x = 'Location', by.y = 'GEOCODIG_M', all.x = TRUE)