我在r
中有一个向量a <- c(1,2,3,4)
b <- c(2,3,4,5)
c <- c(5,6,7,8)
d <- c(10,11)
我在r。
中有以下数据框No
1
2
3
4
5
6
7
8
10
11
我想要的数据框如下
No Match
1 a
2 a
3 a
4 a
5 b
6 c
7 c
8 c
10 d
11 d
我怎样才能在r?
中这样做答案 0 :(得分:1)
构建表格后我们可以使用match
。如果您的向量在列表中开始将很容易:
vec_list = list(a = a, b = b, c = c, d = d)
x = data.frame(value = unlist(vec_list), letter = rep(names(vec_list), lengths(vec_list)))
# or a named vector
xx = unlist(vec_list)
names(xx) = rep(names(vec_list), lengths(vec_list))
your_data = data.frame(No = 1:8)
your_data$Match = x$letter[match(your_data$No, x$value)]
your_data$Match_vec = names(xx)[match(your_data$No, xx)]
your_data
# No Match Match_vec
# 1 1 a a
# 2 2 a a
# 3 3 a a
# 4 4 a a
# 5 5 b b
# 6 6 c c
# 7 7 c c
# 8 8 c c
我们也可以对x
表进行重复数据删除或多或少相同的结果
x[!duplicated(x$value), ]
如果没有背景,很难知道哪种情况最适合你的情况。
答案 1 :(得分:0)
我创建了两个可以帮助您获得正确变量名称的函数。这是我的解决方案。
getVariable <- function(x){
for(currentVar in ls(envir = .GlobalEnv)){
if(class(get(currentVar)) == "numeric") if(x %in% get(currentVar)) return(currentVar)
}
return(NA)
}
getAll <- function(y){
myList <- c()
for(values in y){
myList <- c(myList,getVariable(values))
}
return(myList)
}
a <- c(1,2,3,4)
b <- c(2,3,4,5)
c <- c(5,6,7,8)
d <- c(10,11)
myDat <- structure(list(No = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 10L, 11L
)), .Names = "No", row.names = c(NA, -10L), class = "data.frame")
myDat$Match <- getAll(myDat$No)
myDat
# No Match
# 1 1 a
# 2 2 a
# 3 3 a
# 4 4 a
# 5 5 b
# 6 6 c
# 7 7 c
# 8 8 c
# 9 10 d
# 10 11 d