通过自动搜索列表生成新的计算变量
Generate new calculated variable with automated search of list
我认为这是一个简单的问题,但我很难让它工作。
我有一个带有 id 变量(唯一行)的数据框,以及一系列带有二进制 (0,1) 结果的列。
# ID Var1 Var2 Var3 Var4 Var5
# 1 0 0 0 1 0
# 2 1 0 0 0 0
# 3 0 1 0 0 0
我有一个变量列表 "classes"
ClassList = list(Class1 = c("Var1", "Var2"), Class2 = c("Var3", "Var4","Var5")
我想生成一个新变量 Class1 = 1 if Var1 | Var2 = 1,否则为 0。
我可以使用不太优雅的方法来做到这一点,但我想制作一个更自动化的 function/loop/apply 来创建 ClassVar、搜索 ClassList 并适当地重新编码以生成以下内容:
# ID Var1 Var2 Var3 Var4 Var5 Class1 Class2
# 1 0 0 0 1 0 0 1
# 2 1 0 0 0 0 1 0
# 3 0 1 0 0 0 1 0
有很多 Var's 和 Classe's 需要合并,所以用 if_else 进行暴力破解效率不高。有什么建议吗?
到目前为止我所做的部分是生成 class 变量:
for (I in 1:length(ClassList)) {
classname <- names(ClassList)[I]
df[,paste0(classname)] <- NA
}
这是一个基本的 R 方法,其中包含 lapply
、max.col
和矩阵子集:
df[names(ClassList)] <- lapply(ClassList,
function(i) df[i][cbind(seq_len(nrow(df)), max.col(df[i]))])
哪个return
df
ID Var1 Var2 Var3 Var4 Var5 Class1 Class2
1 1 0 0 0 1 0 0 1
2 2 1 0 0 0 0 1 0
3 3 0 1 0 0 0 1 0
这里,lapply
将max.col
应用到ClassList
的每个元素,其中return 是每行具有最大值的列的位置。我将这些列位置与行位置绑定到 return 一个矩阵,该矩阵指示每行的最大元素的位置。然后将这些从 data.frame 和 returned 中提取为向量。 df[i]
用于将 data.frame 子集化为 ClassList 的每个元素中包含的那些列。
我认为这是一个简单的问题,但我很难让它工作。
我有一个带有 id 变量(唯一行)的数据框,以及一系列带有二进制 (0,1) 结果的列。
# ID Var1 Var2 Var3 Var4 Var5
# 1 0 0 0 1 0
# 2 1 0 0 0 0
# 3 0 1 0 0 0
我有一个变量列表 "classes"
ClassList = list(Class1 = c("Var1", "Var2"), Class2 = c("Var3", "Var4","Var5")
我想生成一个新变量 Class1 = 1 if Var1 | Var2 = 1,否则为 0。
我可以使用不太优雅的方法来做到这一点,但我想制作一个更自动化的 function/loop/apply 来创建 ClassVar、搜索 ClassList 并适当地重新编码以生成以下内容:
# ID Var1 Var2 Var3 Var4 Var5 Class1 Class2
# 1 0 0 0 1 0 0 1
# 2 1 0 0 0 0 1 0
# 3 0 1 0 0 0 1 0
有很多 Var's 和 Classe's 需要合并,所以用 if_else 进行暴力破解效率不高。有什么建议吗?
到目前为止我所做的部分是生成 class 变量:
for (I in 1:length(ClassList)) {
classname <- names(ClassList)[I]
df[,paste0(classname)] <- NA
}
这是一个基本的 R 方法,其中包含 lapply
、max.col
和矩阵子集:
df[names(ClassList)] <- lapply(ClassList,
function(i) df[i][cbind(seq_len(nrow(df)), max.col(df[i]))])
哪个return
df
ID Var1 Var2 Var3 Var4 Var5 Class1 Class2
1 1 0 0 0 1 0 0 1
2 2 1 0 0 0 0 1 0
3 3 0 1 0 0 0 1 0
这里,lapply
将max.col
应用到ClassList
的每个元素,其中return 是每行具有最大值的列的位置。我将这些列位置与行位置绑定到 return 一个矩阵,该矩阵指示每行的最大元素的位置。然后将这些从 data.frame 和 returned 中提取为向量。 df[i]
用于将 data.frame 子集化为 ClassList 的每个元素中包含的那些列。