r - 根据条件将列标题作为值返回
问题描述
我有一个包含 32 个变量(列)的数据框,分别是 UserId 和一个月中的 31 天,以及 350 行。每个月的天数下的每个值都是一个从 0 向上的数字,采用整数格式。我想创建一个新的数据框,其中每个大于 0 的值现在显示其对应的列名。
下面是一个例子。我想从表 1 到表 2,但我没有遇到任何关于如何做到这一点的信息。任何帮助都会很棒。
Table 1
UserID 01.01.2019 02.01.2019 03.01.2019 04.01.2019 05.01.2019
20 1 0 1 1 1
28 1 0 0 0 1
37 0 0 0 0 1
40 1 0 0 0 0
43 1 1 1 1 0
Table 2
UserID Date
20 01.01.2019
20 03.01.2019
20 04.01.2019
20 05.01.2019
28 01.01.2019
28 05.01.2019
37 05.01.2019
40 01.01.2019
43 01.01.2019
43 02.01.2019
43 03.01.2019
43 04.01.2019
解决方案
在这里完成的是一个基本的 R 选项。使用which
我们首先找到行和列索引,然后从行索引中获取相应UserID
的索引,从列索引中获取列名。
inds <- which(df == 1, arr.ind = TRUE)
data.frame(userID = df$UserID[inds[, 1]], variable = names(df)[inds[, 2]])
# userID variable
#1 20 01.01.2019
#2 28 01.01.2019
#3 40 01.01.2019
#4 43 01.01.2019
#5 43 02.01.2019
#6 20 03.01.2019
#7 43 03.01.2019
#8 20 04.01.2019
#9 43 04.01.2019
#10 20 05.01.2019
#11 28 05.01.2019
#12 37 05.01.2019
推荐阅读
- javascript - 为什么我没有获得 SonarQube 的覆盖范围?
- azure-automation - 从 Azure 自动化刷新分析服务模型时出错
- github-actions - “运行|”之间的区别 并在 github 操作中多次运行
- javascript - 更模块化的 D3.js 编码
- python - writer.writerow() 没有在 for 循环内工作以写入所有特定数据
- python - 如何防止在 Python 代码中使用特定的 GPU
- r - 如何根据因素创建多路表?
- c++ - 矢量迭代器循环使用 g++ 而不是 VisualC++,为什么?
- jwt - 为什么在过滤器中使用 UserDetailsService?智威汤逊
- angular - 下拉列表未显示在数据库中的 html 上