Используйте значения в векторе, чтобы добавить строки в фрейм данных - PullRequest
3 голосов
/ 30 сентября 2019

У меня есть вектор имен:

nums = 1:5
names = paste("name_", nums, sep="")

И фрейм данных, в котором col1 содержит подмножество значений, перечисленных в именах:

Name    Count
name_1  14
name_3  2
name_5  11

Я хотел бы использоватьвектор имен для добавления строк во фрейм данных для имен, которые в данный момент отсутствуют в фрейме данных, так что конечный продукт выглядит следующим образом:

Name    Count
name_1  14
name_2  0
name_3  2
name_4  0
name_5  11

Я встречал некоторые другие варианты этого вопроса, но не могу найти решение, которое соответствует моему сценарию. Спасибо за любую помощь!

Ответы [ 3 ]

4 голосов
/ 30 сентября 2019

Один из вариантов: complete

library(tidyr)
complete(df1, Name = names, fill = list(Count = 0))
# A tibble: 5 x 2
#  Name   Count
#  <chr>  <dbl>
#1 name_1    14
#2 name_2     0
#3 name_3     2
#4 name_4     0
#5 name_5    11

data

df1 <- structure(list(Name = c("name_1", "name_3", "name_5"), Count = c(14L, 
2L, 11L)), class = "data.frame", row.names = c(NA, -3L))
3 голосов
/ 30 сентября 2019

Вы можете объединить и затем заменить NA, возникшие в результате несовпадений, на 0

out <- merge(df, data.frame(Name = names), all = TRUE)
out$Count <- with(out, replace(Count, is.na(Count), 0))

out
#     Name Count
# 1 name_1    14
# 2 name_2     0
# 3 name_3     2
# 4 name_4     0
# 5 name_5    11
3 голосов
/ 30 сентября 2019
data.frame(names, Count = pmax(df1$Count[match(names, df1$Name)], 0, na.rm = TRUE))
#   names Count
#1 name_1    14
#2 name_2     0
#3 name_3     2
#4 name_4     0
#5 name_5    11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...