我有一个二维地图,描述了两种变量之间的联系,看起来像这样:
df = data.frame(matrix(vector(), 4, 4))
rownames(df) <- c("x1", "x2", "x3", "x4")
colnames(df) <- c("y1", "y2", "y3", "y4")
df["x1","y3"] <- 1
df["x2","y2"] <- 1
df["x4","y4"] <- 1
df["x2","y3"] <- 1
实际数据框大小约为1000x100。对于每一行,我需要生成一个列中包含该行中1的所有列。实际的数据框有1000行和100列,因此我正在寻找最有效的流程。
我尝试使用嵌套for循环,但这个过程效率很低。有更快的方法吗?
谢谢!
答案 0 :(得分:1)
您可以使用apply
并迭代这些行,使用which
来标识哪些列具有1. names
函数只提供列名而不是索引。
apply(df, 1, function(x) names(which(x == 1)))
# $x1
# [1] "y3"
#
# $x2
# [1] "y2" "y3"
#
# $x3
# character(0)
#
# $x4
# [1] "y4"