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