用因子名称原位替换整数
In-situ replacement of integers with factor names
我想使用包含在单独数据框中的查找重命名我的数据中的 "levels"。例如:
remove(list = ls())
id1 <- c(1002,1003,1003,1010,1002,1010)
id2 <- c(1002,1003,1004,1010,1004,1004)
data <- c(1,2,3,4,5,6)
df <- data.frame(cbind(id1,id2,data))
id <- c(1002,1003,1004,1010)
site <- c("site A","site B","site C","site D")
lookup <- data.frame(cbind(id,site))
lookup$id <- as.integer(as.character(lookup$id))
我想获得:
id1 id2 data
1 Site A Site A 1
2 Site B Site B 2
3 Site B Site C 3
4 Site D Site D 4
5 Site A Site C 5
6 Site D Site C 6
谢谢。
我们可以使用 lapply
和 match
列
df[1:2] <- lapply(df[1:2], function(x) lookup$site[match(x, lookup$id)])
df
# id1 id2 data
#1 site A site A 1
#2 site B site B 2
#3 site B site C 3
#4 site D site D 4
#5 site A site C 5
#6 site D site C 6
或者更好的是直接 unlist
和 match
。
df[1:2] <- lookup$site[match(unlist(df[1:2]), lookup$id)]
我想使用包含在单独数据框中的查找重命名我的数据中的 "levels"。例如:
remove(list = ls())
id1 <- c(1002,1003,1003,1010,1002,1010)
id2 <- c(1002,1003,1004,1010,1004,1004)
data <- c(1,2,3,4,5,6)
df <- data.frame(cbind(id1,id2,data))
id <- c(1002,1003,1004,1010)
site <- c("site A","site B","site C","site D")
lookup <- data.frame(cbind(id,site))
lookup$id <- as.integer(as.character(lookup$id))
我想获得:
id1 id2 data
1 Site A Site A 1
2 Site B Site B 2
3 Site B Site C 3
4 Site D Site D 4
5 Site A Site C 5
6 Site D Site C 6
谢谢。
我们可以使用 lapply
和 match
列
df[1:2] <- lapply(df[1:2], function(x) lookup$site[match(x, lookup$id)])
df
# id1 id2 data
#1 site A site A 1
#2 site B site B 2
#3 site B site C 3
#4 site D site D 4
#5 site A site C 5
#6 site D site C 6
或者更好的是直接 unlist
和 match
。
df[1:2] <- lookup$site[match(unlist(df[1:2]), lookup$id)]