R 交换数据帧中的指定行

R 交换数据帧中的指定行,r,R,我正在做一个家庭作业,我们创建一个4列10行的数据框,然后创建一个函数来处理这个数据框 问题是: 在R中编写一个名为“transform”的函数,该函数执行以下操作: 按以下顺序接受四个参数(无默认值): df:数据帧。 a:表示所选行号的整数。 b:一个整数,表示第二个/不同的选定行号。 varName:df中任何变量的名称 该职能应: 确保a和b是有效的行号。 如果有效,函数应将所选变量中的值swop到行号“a”和行号“b” 代码必须是单个函数 该代码也适用于具有不同列名的数据帧 trans

我正在做一个家庭作业,我们创建一个4列10行的数据框,然后创建一个函数来处理这个数据框

问题是: 在R中编写一个名为“transform”的函数,该函数执行以下操作: 按以下顺序接受四个参数(无默认值): df:数据帧。 a:表示所选行号的整数。 b:一个整数,表示第二个/不同的选定行号。 varName:df中任何变量的名称

该职能应: 确保a和b是有效的行号。 如果有效,函数应将所选变量中的值swop到行号“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
  }
}
transform nrow(df)|b>nrow(df)){
打印('指定的行号无效')
}
if(a<1 | b<1){
打印('指定的行号无效')
}

v考虑使用提取运算符(
[[
用于列,
[
用于行号)指定数据帧中的精确位置,然后使用赋值转换新值
考虑使用提取运算符(
[[
用于列,
[
用于行号)指定数据帧中的精确位置,然后使用赋值转换新值
transform nrow(df)| b>nrow(df)| a<1 | b<1 |!(varName%in%colnames(df)){参数有效性检查
打印('指定的列名或行号无效')
}
否则{#选择列和行并分配
x
transform nrow(df)| b>nrow(df)| a<1 | b<1 |!(varName%in%colnames(df)){参数有效性检查
打印('指定的列名或行号无效')
}
否则{#选择列和行并分配

X有趣的问题,你已经分配了一个已有的R函数,叫做<代码>转换<代码>。考虑与老师/教授交谈!有趣的问题,你已经分配了一个已经基本的R函数,叫做<代码>转换<代码>。考虑和老师/教授交谈。使用这个解决方案或你自己的答案。你可以回答你自己的问题。使用这个解决方案还是你自己的?你可以回答你自己的问题。
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
my_transform <- function(df, a, b, varName){
  # CHECK VALIDITY OF PARAMS
  if(a > nrow(df) | b > nrow(df) | a < 1 | b < 1 | !(varName %in% colnames(df))){
    print('Invalid var name or row numbers specified')
  }
  else {
    # SELECT COLUMN AND ROW AND ASSIGN
    df[[varName]][a] <- df[[varName]][b]
  }
  return(df)
}

New_Data <- my_transform(Original_Data, 1, 5, "myColumnName")
# ADD A NEW COLUMN WITH SPECIFIED VALUE
New_Data <- base::transform(Original_Data, new_column = 1)
transform <- function(df, a, b, varName){ 

if(a > nrow(df) | b > nrow(df) | a < 1 | b < 1 | !(varName %in% colnames(df))){ # Parameter validity check
        print('Invalid column name or row numbers specified')
}

else { # select column and row and assign
    x <- df[[varName]][a] # [[ gets column number and [ gets row number
    y <- df[[varName]][b]

    df[[varName]][a] = y
    df[[varName]][b] = x
}

return(df)  }