Добавление малого вектора к соответствующим значениям в большом df - PullRequest
0 голосов
/ 30 марта 2020

У меня большой набор данных и маленький вектор, и я хочу добавить элементы вектора, соответствующие указанному filename_id в наборе данных.

Уменьшенная версия моего df:

 V1     V2
1  1 f1.csv
2  2 f1.csv
3  3 f1.csv
4  4 f2.csv
5  5 f2.csv
6  6 f3.csv

vec <- c(1,4,3)

Поэтому я хочу добавить первый элемент ve c ко всем "f1.csv", второй ко всем f2.csv.

Какой самый умный способ сделать это в r?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Вы имеете в виду что-то подобное?

df$V3 <- vec[factor(df$V2, levels = unique(df$V2))]
df

#  V1     V2 V3
#1  1 f1.csv  1
#2  2 f1.csv  1
#3  3 f1.csv  1
#4  4 f2.csv  4
#5  5 f2.csv  4
#6  6 f3.csv  3

Аналогично, используя match

df$V3 <- vec[match(df$V2, unique(df$V2))]
0 голосов
/ 30 марта 2020

Вы можете извлечь числа для поднабора vec, используя gsub и регулярные выражения.

dat <- transform(dat, V3=vec[as.numeric(gsub(".*(\\d+).*", "\\1", V2))])
dat
#   V1     V2 V3
# 1  1 f1.csv  1
# 2  2 f1.csv  1
# 3  3 f1.csv  1
# 4  4 f2.csv  4
# 5  5 f2.csv  4
# 6  6 f3.csv  3

Данные

dat <- structure(list(V1 = 1:6, V2 = c("f1.csv", "f1.csv", "f1.csv", 
"f2.csv", "f2.csv", "f3.csv")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

vec <- c(1, 4, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...