使用键值dataframe替换列值
我必须想象这个问题不是唯一的,但我正在努力寻找哪些词,所以如果这是多余的,请指向我的帖子 我有一个数据帧使用键值dataframe替换列值,r,dplyr,mutate,R,Dplyr,Mutate,我必须想象这个问题不是唯一的,但我正在努力寻找哪些词,所以如果这是多余的,请指向我的帖子 我有一个数据帧 test <- data.frame(x = c("a", "b", "c", "d", "e")) x 1 a 2 b 3 c 4 d 5 e 这里有一种方法,尽管我认为有较短的方法: library(dplyr) test %>% left_join(metadata, by = c("x" = "a")) %>% mutate(b = coalesce
test <- data.frame(x = c("a", "b", "c", "d", "e"))
x
1 a
2 b
3 c
4 d
5 e
这里有一种方法,尽管我认为有较短的方法:
library(dplyr)
test %>%
left_join(metadata, by = c("x" = "a")) %>%
mutate(b = coalesce(b, x))
# x b
#1 a a
#2 b b
#3 c REPLACE_1
#4 d REPLACE_2
#5 e e
(注意,我通过将元数据
加载为字符,而不是因子,使数据类型匹配:
metadata <- data.frame(stringsAsFactors = F,
a = c("c", "d"),
b = c("REPLACE_1", "REPLACE_2"))
metadata使用stringsAsFactors=FALSE
导入数据,并使用dplyr
和stringr
,您可以执行以下操作:
test %>%
mutate(x = str_replace_all(x, setNames(metadata$b, metadata$a)))
x
1 a
2 b
3 REPLACE_1
4 REPLACE_2
5 e
或者使用@Sotos的基本思想:
test %>%
mutate(x = pmax(x, metadata$b[match(x, metadata$a, nomatch = x)], na.rm = TRUE))
你可以
test$x[test$x %in% metadata$a] <- na.omit(metadata$b[match(test$x, metadata$a)])
# x
#1 a
#2 b
#3 REPLACE_1
#4 REPLACE_2
#5 e
test$x[在%metadata$a中测试$x%使用匹配+替换
test <- within(test,x <- replace(as.character(x),match(metadata$a,x),as.character(metadata$b)))
您可以使用match
使此更新加入
我看了一下,或者。
test$x[test$x %in% metadata$a] <- na.omit(metadata$b[match(test$x, metadata$a)])
# x
#1 a
#2 b
#3 REPLACE_1
#4 REPLACE_2
#5 e
test <- within(test,x <- replace(as.character(x),match(metadata$a,x),as.character(metadata$b)))
> test
x
1 a
2 b
3 REPLACE_1
4 REPLACE_2
5 e
i <- match(metadata$a, test$x)
test$x[i] <- metadata$b
# test
# x
#1 a
#2 b
#3 REPLACE_1
#4 REPLACE_2
#5 e
i <- match(test$x, metadata$a)
j <- !is.na(i)
test$x[j] <- metadata$b[i[j]]
test
# x
#1 a
#2 b
#3 REPLACE_1
#4 REPLACE_2
#5 e
test <- data.frame(x = c("a", "b", "c", "d", "e"), stringsAsFactors = FALSE)
metadata <- data.frame(
a = c("c", "d"),
b = c("REPLACE_1", "REPLACE_2"), stringsAsFactors = FALSE)