从二维地图生成匹配列表

时间:2017-12-15 20:28:27

标签: r loops dataframe

我有一个二维地图,描述了两种变量之间的联系,看起来像这样:

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循环,但这个过程效率很低。有更快的方法吗?

谢谢!

1 个答案:

答案 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"