Я делаю домашнее задание, в котором мы создаем фрейм данных с 4 столбцами и 10 строками, а затем создаем функцию для работы с фреймом данных.
Проблема состоит в следующем: написать одну функцию в R, называемую «transform», которая выполняет следующие действия: принимает четыре аргумента (без значений по умолчанию) в следующем порядке: df: информационный кадр.а: целое число, обозначающее выбранный номер строки.b: целое число, указывающее второй / другой выбранный номер строки.varName: имя любой переменной в df.
Функция должна: Убедитесь, что a и b являются действительными номерами строк.Если они действительны, функция должна поменять значение в выбранной переменной на номер строки «a» с номером строки «b».
Код должен быть одной функцией.
Код также должен работать для фрейма данных с разными именами столбцов.
transform <- function(df, a, b, varName){
if(a > nrow(df) | b > nrow(df)){
print('Invalid row numbers specified')
}
if(a < 1 | b < 1){
print('Invalid row numbers specified')
}
v <- varName
c <- which(colnames(df) == v)
if(c == 1){
x <- df[a, 1]
y <- df[b, 1]
df[a, 1] <- y
df[b, 1] <- x
}
if(c == 2){
x <- df[a, 2]
y <- df[b, 2]
df[a, 2] <- y
df[b, 2] <- x
}
if(c == 3){
x <- df[a, 3]
y <- df[b, 3]
df[a, 3] <- y
df[b, 3] <- x
}
if(c == 4){
x <- df[a, 4]
y <- df[b, 4]
df[a, 4] <- y
df[b, 4] <- x
}
}
Ожидаемые результаты:
Num <- c(1:10)
Age <- c(14,12,15,10,23,21,41,56,78,12)
Sex <- c('F','M','M','F','M','F','M','M','F','M')
Group <- letters[1:10]
datfr <- data.frame(Num, Age, Sex, Group)
datfr <- transform(datfr,1,3,"Group")
datfr <- transform(datfr,7,2,"Group")
datfr <- transform(datfr,5,10,"Group")
datfr <- transform(datfr,5,11,"Group")
[1] "ERROR: Invalid row numbers specified"
datfr
Num Age Sex Group
1 1 14 F c
2 2 12 M g
3 3 15 M a
4 4 10 F d
5 5 23 M j
6 6 21 F f
7 7 41 M b
8 8 56 M h
9 9 78 F i
10 10 12 M e
Фактические результаты:
Num <- c(1:10)
Age <- c(14,12,15,10,23,21,41,56,78,12)
Sex <- c('F','M','M','F','M','F','M','M','F','M')
Group <- letters[1:10]
datfr <- data.frame(Num, Age, Sex, Group)
datfr <- transform(datfr, 1, 3, "Group")
datfr <- transform(datfr, 7, 2, "Group")
Error in if (a > nrow(df) | b > nrow(df)) { : argument is of length zero
datfr <- transform(datfr, 5, 10, "Group")
Error in if (a > nrow(df) | b > nrow(df)) { : argument is of length zero
datfr <- transform(datfr, 5, 11, "Group")
Error in if (a > nrow(df) | b > nrow(df)) { : argument is of length zero
datfr
[1] a
Levels: a b c d e f g h i j