У меня есть набор данных (в кадре данных). Я использую apply, чтобы добавить новый столбец в набор данных, в котором строки нового столбца выполняют функцию, используя элементы из других столбцов внутри этой строки. Примените работы, но после того, как она применила эту функцию к каждой строке, она выходит за пределы диапазона и просто продолжает применять значения снова и снова.R Программирование - запретить «применять» от повторяющихся результатов в пределах диапазона данных
Вот данные я начинаю с:
Abbreviation Name X Y Z A B C
JM Jim 3 4 5 6 7 8
JS Jess 5 6 7 8 9 10
Используя следующую команду, я получаю следующие результаты: Команда:
df_new$Test <- apply(df_new,1, function(row) (df_new[,8]/df_new[,6])/(df_new[,5]/df_new[,3]))
возвращаемые данные (из View (df_new))
Abbreviation Name X Y Z A B C Test
JM Jim 3 4 5 6 7 8 .8
JS Jess 5 6 7 8 9 10 .89
.8
.89
.8
.89
Кроме того, когда я пишу эти данные в csv, используя приведенную ниже команду, я получаю Следующий вывод: Команда:
write.csv (df_new, файл = "Df_new.csv", row.names = FALSE)
Abbreviation Name X Y Z A B C Test Test.1 Test.2 Test.3
JM Jim 3 4 5 6 7 8 .8 .8 .8 .8
JS Jess 5 6 7 8 9 10 .89 .89 .89 .89
В идеале, из сказанного выше, я просто хочу df_new [1: 2,1: 9]; однако даже попытка создать объект, который сохраняет только эту информацию, все равно приводит к дополнительным строкам (в представлении (df_new)) или дополнительным столбцам (при записи на .csv).
Не могли бы вы опубликовать результаты 'dput (df_new)', чтобы сделать это воспроизводимая? –
@DavidRobinson данные опубликованы в вопрос? Просто используйте 'read.table (text =" copy/paste here ", h = T)' –
@DavidRobinson, вот что я получаю от dput, хотя решение Dason действительно работает для меня. > dput (df_new) Структура (список (аббревиатура = структура (1: 2, .Label = c ("JM", "JS"), class = "factor"), Name = structure (c (2L, 1L), .Label = c ("Jess", "Jim"), class = "factor"), X = c (3, 5), Y = c (4, 6), Z = c (5, 7), A = c (6, 8), B = c (7, 9), C = c (8, 10), Test = структура (c (0,8, 0,892857142857143, 0,8, 0,892857142857143), Dim = c (2L, 2L), .Dimnames = list ( NULL, c («1», «2»)))), .Names = c («Аббревиатура», «Имя», «X», «Y», «Z», «A», «B», «C», «Test»), row.names = 1: 2, class = «data.frame») –