скопировать фрейм данных в другой соответствующий номер строки

#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