#r #dplyr
Вопрос:
Итак, у меня есть два кадра данных.
df1
:
Date Bond2 Bond3 Bond5 Bond6 Bond7 Bond8 Bond10 Bond11 Bond12 Bond14 Bond15 Bond16 Bond17
1 41275 NA NA NA NA NA NA NA NA NA NA NA NA NA
2 41276 NA NA NA NA NA NA NA NA NA NA NA NA NA
3 41277 NA NA NA NA NA NA NA NA NA NA NA NA NA
4 41278 NA NA NA NA NA NA NA NA NA NA NA NA NA
5 41279 NA NA NA NA NA NA NA NA NA NA NA NA NA
df1
:
Date Bond2 Bond3 Bond4 Bond5 Bond6 Bond7 Bond8 Bond10 Bond11 Bond12 Bond14 Bond16 Bond17 Bond19
1 41275 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 41276 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
3 41277 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
4 41278 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Я хочу создать новый df3
df1
, в котором содержатся все столбцы df2
, а затем a df4
df2
, в котором содержатся все столбцы df1
.
Я думал в направлении filter(df1, names() %in% names(df2))
или select(names(df1) %in% names(df2)
, но ни то, ни другое не работает.
Спасибо
Комментарии:
1. Не могли бы вы предоставить воспроизводимые данные, используя
dput()
2. Привет @Macosso, но я это сделал?
Ответ №1:
Мы можем использовать intersect
имена столбцов из «df1″, » df2 » и использовать их для подмножества столбцов из df1, df2 для создания df3, df4 соответственно
nm1 <- intersect(names(df1), names(df2))
df3 <- df1[nm1]
df4 <- df2[nm1]
Ответ №2:
Если вы хотите придерживаться тидира, одним из способов было бы:
df3 <- df1 %>% select(any_of(names(df2))
df4 <- df2 %>% select(any_of(names(df1))
Комментарии:
1. Я думаю, что это больше
dplyr
, чемtidyr
. 😉2. Спасибо. Я попробовал это, однако я получаю ошибку
Error: Can't subset columns that don't exist. x Columns
Bond4,
Bond19,
Bond23,
Bond24,
Bond25, etc. don't exist.
3. Я только что отредактировал код.
any_of
вместоall_of
того, чтобы делать. Кстати, лучше, если вы опубликуете воспроизводимый набор данных в своем вопросе.