Как найти сходства между двумя наборами данных и создать новый фрейм данных, состоящий из совпадающих строк? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть результаты наблюдений радиозондов для более чем 1000 станций в одном файле и список станций (81), которые на самом деле меня интересуют. Мне нужно создать новый фрейм данных, в который будут включены строки первого файла.

Итак, у меня есть два набора данных, импортированных из файлов .txt в R. Первый - фрейм данных 6694668x6, а второй - 81x1. где строки второго набора данных совпадают с некоторыми значениями первого столбца первого набора данных (значения выглядят так: ACM00078861).

d = data.frame(matrix(ncol = 6, nrow = 0)) 
for(i in 1:81){ 
  for (j in 1:6694668) {
    if(stations[i,1] == ghgt_00z.mly[j,1]){ 
      rbind(d,ghgt_00z.mly[j,] ) 
      j + 1 
    } else {j+1}
  }
}

Я хотел сгенерировать новый фрейм данных, который бы выглядел как «ghgt_00z.mly», но содержал только строки для станций, которые перечислены в «станций». Конечно, код работал в течение нескольких дней, и я получил только предупреждение. Пожалуйста, помогите мне!

1 Ответ

1 голос
/ 17 октября 2019

Есть много вариантов, как это сделать. Я просто использую классические merge()

res <- merge(x=stations, y=ghgt_00z.mly, by='common_coulmn_name', all.x = TRUE)

, где common_coulmn_name - это одинаковое имя столбца, присутствующее в обоих df. В результате вы объединили два df со всеми столбцами, присутствующими в обоих наборах данных, вы можете удалить их, если хотите.

Второй полезный параметр:

library(dplyr)
inp <- ghgt_00z.mly$column_of_interest
res <- filter(stations, grepl(paste(inp, collapse="|"), column_in_stations))

Где inp и column_in_stations должен содержать несколько одинаковых значений.

Из-за того, что у меня нет наборов данных, я не могу проверить эти решения, поэтому я не гарантирую, что они работают нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...