在R中如何将一个值列表与另一个值绑定
我试图将csv文件中的一列变量绑定到整数列表。以下是我的数据的简短示例:在R中如何将一个值列表与另一个值绑定,r,R,我试图将csv文件中的一列变量绑定到整数列表。以下是我的数据的简短示例: blocks 1. 097XX S BRENNAN AVE 2. 105XX S YATES AVE 3. 105XX S YATES AVE 4. 103XX S CORLISS AVE 5. 097XX S BRENNAN AVE 6. 103XX S CORLISS AVE 通过unique(块),我实际上有3个唯一的块名,我给它们分配整数块号: blocks
blocks
1. 097XX S BRENNAN AVE
2. 105XX S YATES AVE
3. 105XX S YATES AVE
4. 103XX S CORLISS AVE
5. 097XX S BRENNAN AVE
6. 103XX S CORLISS AVE
通过unique(块),我实际上有3个唯一的块名,我给它们分配整数块号:
blocks block_num
1. 097XX S BRENNAN AVE 1
2. 105XX S YATES AVE 2
3. 103XX S CORLISS AVE 3
问题是,如何才能使原始的长块列表中包含相应的块编号列,如下所示:
blocks block_num
1. 097XX S BRENNAN AVE 1
2. 105XX S YATES AVE 2
3. 105XX S YATES AVE 2
4. 103XX S CORLISS AVE 3
5. 097XX S BRENNAN AVE 1
6. 103XX S CORLISS AVE 3
我有大约2000个区块观测。因此,我正在寻找一种快速的方法来将赋值应用于长列表
谢谢 在这里,我使用了
data.table
包,但您也可以使用data.frame
包。解决方案的核心是使用match
功能将块与唯一块列表进行匹配
set.seed(1234)
library(data.table)
xmpl <- data.table(block = sample(c("aaa", "bbb", "ccc"), 10, TRUE))
xmpl[ , block_num := match(block, unique(block))]
xmpl
# block block_num
# 1: aaa 1
# 2: bbb 2
# 3: bbb 2
# 4: bbb 2
# 5: ccc 3
# 6: bbb 2
# 7: aaa 1
# 8: aaa 1
# 9: bbb 2
# 10: bbb 2
请注意,unique
不会重新排序,第一个示例中给出的字母顺序纯属偶然。当块没有按字母顺序排列时,该方法仍然有效
xmpl <- data.table(block = rep(c("bbb", "aaa", "ccc"), 3))
xmpl[ , block_num := match(block, unique(block))]
xmpl
block block_num
# 1: bbb 1
# 2: aaa 2
# 3: ccc 3
# 4: bbb 1
# 5: aaa 2
# 6: ccc 3
# 7: bbb 1
# 8: aaa 2
# 9: ccc 3
xmpl在这里,我使用了data.table
包,但您也可以使用data.frame
。解决方案的核心是使用match
功能将块与唯一块列表进行匹配
set.seed(1234)
library(data.table)
xmpl <- data.table(block = sample(c("aaa", "bbb", "ccc"), 10, TRUE))
xmpl[ , block_num := match(block, unique(block))]
xmpl
# block block_num
# 1: aaa 1
# 2: bbb 2
# 3: bbb 2
# 4: bbb 2
# 5: ccc 3
# 6: bbb 2
# 7: aaa 1
# 8: aaa 1
# 9: bbb 2
# 10: bbb 2
请注意,unique
不会重新排序,第一个示例中给出的字母顺序纯属偶然。当块没有按字母顺序排列时,该方法仍然有效
xmpl <- data.table(block = rep(c("bbb", "aaa", "ccc"), 3))
xmpl[ , block_num := match(block, unique(block))]
xmpl
block block_num
# 1: bbb 1
# 2: aaa 2
# 3: ccc 3
# 4: bbb 1
# 5: aaa 2
# 6: ccc 3
# 7: bbb 1
# 8: aaa 2
# 9: ccc 3
xmpl在“data.table”中更惯用的方法是使用.GRP
继续dayne的样本数据:
set.seed(1234)
library(data.table)
xmpl <- data.table(block = sample(c("aaa", "bbb", "ccc"), 10, TRUE))
xmpl[, block_num := .GRP, by = block][]
# block block_num
# 1: aaa 1
# 2: bbb 2
# 3: bbb 2
# 4: bbb 2
# 5: ccc 3
# 6: bbb 2
# 7: aaa 1
# 8: aaa 1
# 9: bbb 2
# 10: bbb 2
set.seed(1234)
库(数据表)
xmpl在“data.table”中更惯用的方法是使用.GRP
继续dayne的样本数据:
set.seed(1234)
library(data.table)
xmpl <- data.table(block = sample(c("aaa", "bbb", "ccc"), 10, TRUE))
xmpl[, block_num := .GRP, by = block][]
# block block_num
# 1: aaa 1
# 2: bbb 2
# 3: bbb 2
# 4: bbb 2
# 5: ccc 3
# 6: bbb 2
# 7: aaa 1
# 8: aaa 1
# 9: bbb 2
# 10: bbb 2
set.seed(1234)
库(数据表)
xmpl您可能正在寻找帮助(“合并”)
。您可能正在寻找帮助(“合并”)
。很好--我完全忘记了.GRP.Nice--我完全忘记了.GRP。