我有三个变量的名称,我需要将它们转换为一个由1和0组成的矩阵,每个名称都有列,其中1表示名称出现在5个变量中的任何位置,0表示没有出现。如下所示:
Var1 Var2 Var3
Name1 Name2 Name3
Name1 Name4 Name5
Name3 Name5 Name6
Name2 Name3 Name4我需要这样的东西
Name1 Name2 Name3 Name4 Name5 Name6
1 1 1 0 0 0
1 0 0 1 1 0
0 0 1 0 1 1
0 1 1 1 0 0如果是单个名称和单个变量,我会使用transform(data, Name1 = ifelse(Var1 == "Name1", 1, 0)),但我不知道如何对所有名称和所有变量执行此操作。
发布于 2019-03-19 03:54:41
nm = sort(unique(unlist(df1)))
data.frame(setNames(lapply(nm, function(x)
rowSums(sapply(df1, function(d) as.numeric(d %in% x)))), nm))
# Name1 Name2 Name3 Name4 Name5 Name6
#1 1 1 1 0 0 0
#2 1 0 0 1 1 0
#3 0 0 1 0 1 1
#4 0 1 1 1 0 0#DATA
df1 = structure(list(Var1 = c("Name1", "Name1", "Name3", "Name2"),
Var2 = c("Name2", "Name4", "Name5", "Name3"),
Var3 = c("Name3", "Name5", "Name6", "Name4")),
class = "data.frame", row.names = c(NA, -4L))https://stackoverflow.com/questions/55229029
复制相似问题