Цикл одного файла через другой файл в R - PullRequest
0 голосов
/ 28 апреля 2019

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

Данные1 - это мой файл клиента, и мне нужно взять каждую строку клиента и зациклить ее над каждой строкой во втором файле и вычесть данные1 из данных2.

Data3 - так должен выглядеть мой выходной файл.

Буду признателен за любую помощь: -)

data1 <- data.frame("ID" = c(1, 2, 3),
        "Var1" = c(377, 649, 592))

ID Var1 1 1 377 2 2 649 3 3 592

data2 <- data.frame("Class" = c("a", "b", "c"),
     "Var1" = c(444, 887, 437))

Class Var1 1 a 444 2 b 887 3 c 437

data3 <- data.frame("ID" = c(1, 2, 3),
         "a" = c(-67, 205, 148),
         "b" = c(-510, -238, -295),
         "c" = c(-60, 212, 155))

ID a b c 1 1 -67 -510 -60 2 2 205 -238 212 3 3 148 -295 155

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Давайте начнем.Базовый цикл использует команду for.

Попробуйте, чтобы увидеть это.

for (i in 1:3) {
        print(i)
}

i - это переменная, которую я составил для итератора, значение которого меняется при каждом выполнениипетли.Какие значения получит переменная i?Те в векторе 1:3, последовательность целых чисел от 1 до 3. Внутри цикла я напечатал переменную итератора.Вы запускаете этот код, видите вывод и у вас есть картина того, что происходит в цикле.

Теперь вы начинаете заполнять элементы, чтобы удовлетворить заданный вопрос.Вы начали с того, что хотите перебрать два набора данных.На вашей иллюстрации предполагается, что строки расположены по порядку, и каждый из них использует один и тот же идентификатор.Ну, во-первых, как вы будете ссылаться на значение данных?

Один из способов, которым вы можете ссылаться на отдельные переменные в первом наборе данных, выглядит следующим образом.Числа в скобках относятся к строке и столбцу фрейма данных.

data1[1, 2]
data1[2, 2]
data1[3, 2]

Теперь у вас есть некоторые идеи о том, что включить в код для этого простого цикла.

В конечном счете, дляКакую задачу вы описали, вы узнаете, как соединять наборы данных по ключу, а не с помощью циклов.Однако это не то, что вы спросили.Вы сказали, что хотите понять циклы, так что это дает вам старт.Удачи!

0 голосов
/ 28 апреля 2019

Этот код будет делать то, что вы хотите. Просто зациклите данные из файла 1; в этом цикле переберите данные из файла 2. Вы инициализируете data.frame и просто добавляете строку с каждым проходом через внешний цикл. Важно отметить использование j+1 во внутреннем цикле для помещения каждого вычисления в соответствующий столбец в фрейме данных data3.

Этот код показывает три способа вырезания данных из фрейма данных - с использованием номера столбца (data3[i,1]); используя имя столбца (data1$ID[i]); и используя имя столбца в сочетании с номером строки (data1[i, "ID"]).

data3 <- data.frame(ID=0, a=0, b=0, c=0)
for (i in 1:nrow(data1)) {
    data3[i,1] <- data1$ID[i] # or data1[i,"ID"]
    for (j in 1:nrow(data2)) {
        data3[i,j+1] <- data1$Var1[i] - data2$Var1[j]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...