【发布时间】:2021-07-03 17:54:17
【问题描述】:
我对 R 很陌生,我正在尝试使用我的数据集中已经存在的多个列的信息在我的数据集中创建一个新的列/变量df。我希望使用mapply 函数来执行此操作。这是指在某人的右侧和左侧进行的某些测量的数据。然而,只有这些方面之一受到影响,并由df$laterality 定义。最终,我想创建新的变量/列,它将从测量中收集的数据定义为从受影响方收集的数据。
我的数据,简化后,基本上如下所示
recordID <- c(1, 2, 3, 4)
laterality <- c(right, right, left, right)
right_1_measure <- c(2.3, 3.4, 1.7, 2.4)
right_2_measure <- c(1.3, 2.2, 3.1, 4.1)
right_3_measure <- c(2.7, 2.8, 4.2, 3.9)
left_1_measure <- c(1.5, 2.6, 4.5, 2.8)
left_2_measure <- c(1.1, 3.4, 3.5, 2.6)
left_3_measure <- c (2.6, 2.8, 3.6, 1.6)
df <- data.frame(recordID, laterality, right_1_measure, right_2_measure, right_3_measure, left_1_measure, left_2_measure, left_3_measure)
然后,我创建了一个我希望循环通过的列名的向量,以创建新的“受影响”变量/列,我将根据先前定义的变量命名,但添加前缀“aff”。我还创建了一个我希望为新列提供名称的向量。
right_vars <- c("right_1_measure", "right_2_measure" , "right_3_measure")
left_vars <- c("left_1_measure", "left_2_measure" , "left_3_measure")
aff_vars <- c("aff_1_measure", "aff_2_measure", "aff_3_measure")
然后我创建了我计划用来根据df$laterality有条件地创建新列的函数
aff_var_create <- function (x, y, z){
df$x <- ifelse(df$laterality == "Right" , df$y, ifelse (df$laterality == "Left", df$z, NA))
}
然后我创建了我的mapply 代码
mapply(FUN = aff_var_create, x = aff_vars, y = r_vars, z = l_vars)
但是,当我运行它时,我收到以下错误消息:
Error in ans[ypos] <- rep(yes, length.out = len)[ypos] :
replacement has length zero
In addition: Warning message:
In rep(yes, length.out = len) :
Error in ans[ypos] <- rep(yes, length.out = len)[ypos] :
replacement has length zero
我检查了我的数据框,所有列中都有数据,所以我很困惑为什么 y.pos 的长度为零。
最终,我希望我的数据框如下所示
recordID <- c(1, 2, 3, 4)
laterality <- c(right, right, left, right)
right_1_measure <- c(2.3, 3.4, 1.7, 2.4)
right_2_measure <- c(1.3, 2.2, 3.1, 4.1)
right_3_measure <- c(2.7, 2.8, 4.2, 3.9)
left_1_measure <- c(1.5, 2.6, 4.5, 2.8)
left_2_measure <- c(1.1, 3.4, 3.5, 2.6)
left_3_measure <- c (2.6, 2.8, 3.6, 1.6)
aff_1_measure <- c(2.3, 3.4, 4.5, 2.4)
aff_2_measure <- c(1.3, 2.2, 3.5, 4.1)
aff_3_measure <- c(2.7, 2.8, 3.6, 3.9)
df <- data.frame(recordID, laterality, right_1_measure, right_2_measure, right_3_measure, left_1_measure, left_2_measure, left_3_measure, aff_1_measure, aff_2_measure, aff_3_measure)
任何解决此问题或使用其他方法获得类似结果的建议将不胜感激!谢谢。
【问题讨论】: