Автоматически добавлять любые переменные, которые существуют в одном data.frame, но отсутствуют в других data.frames в R - PullRequest
0 голосов
/ 02 июня 2019

Предположим, у меня есть ссылка data.frame с именем a. Мне было интересно, как я могу автоматически добавлять любые переменные, которые существуют в a, но отсутствуют в других data.frames b и d?

ПРИМЕЧАНИЕ: Моя цель состоит в том, чтобы сделать из этого такую ​​функцию, чтобы любое число data.frames и любое количество переменных могли быть завершены на основе одной ссылки data.frame.

a <- data.frame(x = 2:3, y = 4:5, z = c(T, F)) ## reference data.frame

b <- data.frame(x = 6:7) ## Add y and z here

d <- data.frame(x = 7:8) ## Add y and z here

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Предполагая, что все задействованные data.frames имеют одинаковое количество строк, вы можете просто:

toadd<-setdiff(colnames(a),colnames(b))
b[toadd]<-a[toadd]

Обернуть вышеупомянутое в функцию:

f<-function(refdf, ...) {
    res<-listdf<-list(...)
    res<-lapply(listdf, function(x) {
        toadd<-setdiff(names(refdf),names(x))
        x[toadd]<-refdf[toadd]
        x
    })
    c(list(refdf),res)
}

Затем попробуйте, например,:

f(a,b)
f(a,b,d)
0 голосов
/ 02 июня 2019

В зависимости от того, что именно вы хотите, вы меняете все параметры:

res <- merge(df1, df2, by = intersect(colnames(df1), colnames(df2)), all.x = TRUE)
...