如何将列中的每个数据分别转换为新表中的新列

时间:2018-11-26 18:04:55

标签: r

假设有一个表用于显示“哪个ID何时访问了哪个组织”。表格中的ID,组织和访问时间列。由于一个人可以在不同的时间访问多个组织,因此,如果他们也访问了其他组织,则可以在“ ID”列中重复某些ID。

我想从初始表中提取ID和Organization列,在新表中,我想将组织数据转换为变量(列),并显示ID如何与每个组织匹配。

示例数据:

ID <- c( 001, 002, 003, 004, 005, 002) 
Organisation <- c( "A", "B", "C", "A","D", "A") 
Accessed.Time <- c("17:00", "17:00", "17:00", "17:00", "17:00", "17:02")
df1<-data.frame(ID,Organisation,Accessed.Time)

预期结果如下,例如,(0 =没有访问,1 =已访问)

 ID  Organisation.A  Organisation.B Organisation.C

 001  1  0  1
 002  0  0  1
 003  1  1  1

在这种情况下,我找不到需要使用哪个程序包或函数。 尤其是,有没有人知道如何提取列中的数据,然后将其作为新表中的单个列进行散布?

2 个答案:

答案 0 :(得分:2)

我们可以使用table

+(table(df1[1:2]) > 0)

答案 1 :(得分:1)

这是一个tidyverse解决方案:

library(tidyverse)

df1 %>%
 mutate(Accessed.Time = 1) %>%
 spread(Organisation, Accessed.Time, fill = 0)

df1 %>%
 count(ID, Organisation) %>%
 spread(Organisation, n, fill = 0)

我认为第二种解决方案更加优雅,但是结果是相同的。