在R中创建一个二进制指标矩阵(布尔矩阵) [英] Create a binary indicator matrix (Boolean matrix) in R
问题描述
我有一个数据列表,表明参加会议的情况如下:
I have a list of data indicating attendance to conferences like this:
Event Participant
ConferenceA John
ConferenceA Joe
ConferenceA Mary
ConferenceB John
ConferenceB Ted
ConferenceC Jessica
我想创建以下格式的二进制指标出勤矩阵:
I would like to create a binary indicator attendance matrix of the following format:
Event John Joe Mary Ted Jessica
ConferenceA 1 1 1 0 0
ConferenceB 1 0 0 1 0
ConferenceC 0 0 0 0 1
有没有办法在R中做到这一点?
Is there a way to do this in R?
推荐答案
假设您的data.frame
被称为"mydf",只需使用table
:
Assuming your data.frame
is called "mydf", simply use table
:
> table(mydf)
Participant
Event Jessica Joe John Mary Ted
ConferenceA 0 1 1 1 0
ConferenceB 0 0 1 0 1
ConferenceC 1 0 0 0 0
如果某人有可能多次参加会议,导致table
返回大于1的值,则可以像这样将所有大于1的值重新编码.
If there is a chance that someone would have attended a conference more than once, leading table
to return a value greater than 1, you can simply recode all values greater than 1 to 1, like this.
temp <- table(mydf)
temp[temp > 1] <- 1
请注意,这将返回table
.如果要返回data.frame
,请使用as.data.frame.matrix
:
Note that this returns a table
. If you want a data.frame
to be returned, use as.data.frame.matrix
:
> as.data.frame.matrix(table(mydf))
Jessica Joe John Mary Ted
ConferenceA 0 1 1 1 0
ConferenceB 0 0 1 0 1
ConferenceC 1 0 0 0 0
在上面,"mydf"定义为:
In the above, "mydf" is defined as:
mydf <- structure(list(Event = c("ConferenceA", "ConferenceA",
"ConferenceA", "ConferenceB", "ConferenceB", "ConferenceC"),
Participant = c("John", "Joe", "Mary", "John", "Ted", "Jessica")),
.Names = c("Event", "Participant"), class = "data.frame",
row.names = c(NA, -6L))
请以后以类似方式共享您的数据.
Please share your data in a similar manner in the future.
这篇关于在R中创建一个二进制指标矩阵(布尔矩阵)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!