优雅的方式(没有额外的套餐)以及#34;扩展"根据其中一个列的给定data.frame
?
假设:
df <- data.frame(values = 1:5, strings = c("e", "g", "h", "b", "c"))
more.strings <- letters[c(3, 5, 7, 1, 4, 8, 6)]
期望的结果:data.frame
包含:
5 c
1 e
2 g
NA a
NA d
3 h
NA f
因此df$strings
中出现的more.strings
值应该用于填充新的data.frame
(否则为NA)。
答案 0 :(得分:2)
你可以join
:
在基地R你可以这样做:
merge(df, more.strings, by.y="y",by.x="strings", all.y=TRUE)
strings values
1 c 5
2 e 1
3 g 2
4 h 3
5 a NA
6 d NA
7 f NA
或者@thelatemailin在下面的评论部分给出:
merge(df, list(strings=more.strings),by="strings", all.y=TRUE)
使用库:
library(tidyverse)
right_join(df,data.frame(strings=more.strings),by="strings")
values strings
1 5 c
2 1 e
3 2 g
4 NA a
5 NA d
6 3 h
7 NA f
答案 1 :(得分:1)
我们可以在不使用任何库的情况下执行此操作,即仅使用base R
data.frame(value = with(df, match(more.strings, strings)),
strings = more.strings)
# value strings
#1 5 c
#2 1 e
#3 2 g
#4 NA a
#5 NA d
#6 3 h
#7 NA f
或者我们可以使用complete
library(tidyverse)
complete(df, strings = more.strings) %>%
arrange(match(strings, more.strings)) %>%
select(names(df))
# A tibble: 7 x 2
# values strings
# <int> <chr>
#1 5 c
#2 1 e
#3 2 g
#4 NA a
#5 NA d
#6 3 h
#7 NA f