首页 > 解决方案 > 根据条件将列标题作为值返回

问题描述

我有一个包含 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

标签: rdataframe

解决方案


在这里完成的是一个基本的 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

推荐阅读