#r
#r
Вопрос:
У меня есть фрейм данных, подобный приведенному ниже. Обратите внимание, что первый столбец — это имя строки в случайном порядке.
ID
5 10
3 10
1 10
Их. У меня есть еще 5 * 1 фрейм данных B с NAs. Я пытаюсь скопировать A в B, соответствующие именам столбцов в A. Я хочу получить фрейм данных, как показано ниже.
ID
1 10
2 NA
3 10
4 NA
5 10
Комментарии:
1. Просто сделайте
B$ID[row.names(A)] <- A$ID
2. Имеет ли
B
другое имя столбца? Или в нем есть несколько столбцовB
?B
Гарантируется ли наличие всех имен строк из A? Вы говорите «сопоставление имен столбцов в A», означает ли этоA
, что на самом деле имеет несколько столбцов?
Ответ №1:
То, что вы пытаетесь сделать, потенциально опасно. Если вы на 100% уверены, что строки содержат идентификаторы, которые будут совпадать между 2 фреймами данных, вот код.
library(tidyverse)
# Generate a data frame that looks like yours (you don't need this)
df <- data.frame(ID=c(10, NA, 10, NA, 10))
# Assign row names to a new column on the df
df$names <- row.names(df)
# Here's how your data will look like
df<-df[complete.cases(df),]
# Make a second df
df2 <- data.frame(names=as.character(1:20))
# Join by names (what are other possible columns to join by ?)
left_join(df2, df, by="names")
Это приведет к
names ID
1 1 10
2 2 NA
3 3 10
4 4 NA
5 5 10
6 6 NA
7 7 NA
8 8 NA
9 9 NA
10 10 NA
11 11 NA
12 12 NA
13 13 NA
14 14 NA
15 15 NA
16 16 NA
17 17 NA
18 18 NA
19 19 NA
20 20 NA