我有一系列不同长度的独立变量列表(字符串)。我想将它们组合到一个数据帧中,以创建一个状态(1)/不存在(0)矩阵。鉴于它们的长度不同,我什至不知道如何创建初始数据帧。这是我的示例:
render() {
const { company, date, position, image, id } = this.props
return (
<Router>
<Card data-cy="JobCard" to={`/jobs/${id}`}>
<Image src={image} />
<Position>{position}</Position>
<Company>{company}</Company>
<Date>
<Moment format="D MMM">{date}</Moment>
</Date>
</Card>
</Router>
)
}
我的最终结果是,我想创建一个如下所示的二进制存在/不存在矩阵,以便创建一个图形(类似于热图)来显示该图形。
data1 <- c("a", "b", "c", "d", "e", "f")
data2 <- c("e", "f", "g")
data3 <- c("a", "c", "g")
我对R还是很陌生,所以希望我的解释还可以。感谢您的帮助。
答案 0 :(得分:0)
splitstackshape
程序包中有一个名为charMat
的帮助程序功能,您可能想试试
dat <- paste0("data", 1:3)
out <- t(splitstackshape:::charMat(listOfValues = mget(dat), fill = 0L))
colnames(out) <- dat
out
# data1 data2 data3
#a 1 0 1
#b 1 0 0
#c 1 0 1
#d 1 0 0
#e 1 1 0
#f 1 1 0
#g 0 1 1
数据
data1 <- c("a", "b", "c", "d", "e", "f")
data2 <- c("e", "f", "g")
data3 <- c("a", "c", "g")
说明
该函数期望list
作为第一个参数。我们可以使用mget
创建该列表
mget(dat)
#$data1
#[1] "a" "b" "c" "d" "e" "f"
#$data2
#[1] "e" "f" "g"
#$data3
#[1] "a" "c" "g"
其中dat
是一个包含输入数据名称的字符向量
dat
#[1] "data1" "data2" "data3"
t
用于转置charMat
的输出。
希望这会有所帮助。
答案 1 :(得分:0)
我将使用%in%
来执行此操作,如果存在或不存在值,则返回一个逻辑向量。稍后,我们使用as.integer
将逻辑值转换为0和1。
# create a master list
master_list <- unique(c(data1, data2, data3))
# make sure each list is as long as master to avoid,
# this error : longer object length is not a multiple of shorter object length
# adding 'll' just a random value
data1 <- c(data1, rep('ll', length(master_list) - length(data1)))
data2 <- c(data2, rep('ll', length(master_list) - length(data2)))
data3 <- c(data3, rep('ll', length(master_list) - length(data3)))
# create output matrix
mat <- matrix(c(as.integer(master_list %in% data1),
as.integer(master_list %in% data2),
as.integer(master_list %in% data3)),
nrow = length(master_list),
dimnames = list(master_list))
[,1] [,2] [,3]
a 1 0 1
b 1 0 0
c 1 0 1
d 1 0 0
e 1 1 0
f 1 1 0
g 0 1 1